标签:
常会遇到一种情况,在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(); //上下文移动到画布点sPoint CGContextMoveToPoint(context, sPoint.x, sPoint.y); //给上下文添加线到点ePoint CGContextAddLineToPoint(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的frame textLayer.frame = frame; //添加到layer上 [self.layer addSublayer:textLayer]
其他的以后有时间再写
标签:
原文地址:http://www.cnblogs.com/absty-guo/p/5869338.html