首页 > 代码库 > drawRect中一些方法的调用

drawRect中一些方法的调用

常会遇到一种情况,在drawRect中用上下文绘制了一个图形,当运行时发现除了自己的图形外,其他的背景都是黑的。这是因为没有给其他的区域设置颜色

设置方法:

-(void)drawRect:(CGRect)rect{    //为rect设置整体背景颜色    [[UIColor greenColor] setFill];    UIRectFill(rect);}

 

上下文只有在drawRect中获得才有作用,其他方法中获取值为空

drawRect中绘图,可以使用上下文,也可以使用CAShapeLayer进行绘制,layer绘制的话,有一个好处就是layer有个

zPosition属性(值越大显示越靠上),可以动态的设置 layer的层级,而上下文绘制是按先绘制的在下,层级不好控制

两种方式划线

layer:

 CAShapeLayer *lineLayer = [CAShapeLayer layer];    UIBezierPath *linePath = [UIBezierPath bezierPath];    //线    [linePath moveToPoint:startPoint];    [linePath addLineToPoint:endPoint];        //将绘制路径赋值给layer    lineLayer.path = linePath.CGPath;    //设置线的颜色        lineLayer.strokeColor = [UIColor redColor].CGColor;    //设置线头部类型    lineLayer.lineCap       = kCALineCapSquare;    //设置线宽    lineLayer.lineWidth = 10;    //设置线的层级    lineLayer.zPosition = 251;        //添加到layer上    [self.layer addSublayer:lineLayer];

上下文:

//获取上下文CGContextRef context = UIGraphicsGetCurrentContext();//上下文移动到画布点sPointCGContextMoveToPoint(context, sPoint.x, sPoint.y);//给上下文添加线到点ePointCGContextAddLineToPoint(context, ePoint.x, ePoint.y);//设置颜色        CIColor * bclor = [[CIColor alloc] initWithColor:edg.beginColor];CGContextSetStrokeColor(context, bclor.components);//也可以[[UIColor blueColor] setStroke];//CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0, 1);//设置线宽CGContextSetLineWidth(context, edg.width);//设置绘图方式并绘图stroke描边 fill填充      CGContextDrawPath(context, kCGPathFillStroke);

其他的图形绘制类似,layer还有点功能就是写文字

CATextLayer * textLayer = [CATextLayer layer];        //解决文字不清晰问题        textLayer. wrapped = YES ; //设置字体大小        textLayer.fontSize = 22;//设置显示文字        textLayer.string = name;//设置文字颜色        textLayer.foregroundColor = roadColor.CGColor;//设置背景颜色textLayer.backgroundColor = [UIColor lightGrayColor].CGColor;//设置layer的frametextLayer.frame = frame;//添加到layer上[self.layer addSublayer:textLayer]

其他的以后有时间再写

 

drawRect中一些方法的调用