//drawRect:(CGRect)rect 是系统提供进行自定义绘图的 rect画布的大小,一般是view的bounds
//自定义绘制分为三步
1.获得画布 2.画布上添加图形 3.描绘图形(填充,描边)
填充:CGContextFillPath(context);
描边:CGContextStrokePath(context);
//上下文,可以理解为画布,承载所有我们自定义绘制的内容
UIContextRef context = UIGraphicsGetCurrentContext;
设置填充的颜色
CGContextSexFillColorWithColor(context, [[UIColorblueColor]CGColor]);
设置描边的颜色
CGContextSetStrokeColorWithColor(context, [[UIColorredColor]CGColor]);
设置线条的宽度
CGContextSetLineWidth(context,5.0f);
画矩形
CGContextAddRect(context,CGRectMake(10, 20, 100, 200))
//画椭圆
CGContextAddEllipseInRect(context,CGRectMake(130,20,100,200));
//x,y,radius 圆心坐标和半径。
//弧线在圆上的度数。
//clockwise,0,顺时针画,1,逆时针画。
CGContextAddArc(context,100,350,100,0,M_PI_2,1);画直线 x,y线段的终点坐标.线段的起点就是上次绘制的终点CGContextMoveToPoint(context,300,100);
CGContextAddLineToPoint(context,300,400);
//写一段文字。
NSString* text = @"这是一段很长很长的文字"; [textdrawAtPoint:CGPointMake(10, 230) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:25.0f], NSForegroundColorAttributeName:[UIColor orangeColor], NSBackgroundColorAttributeName:[UIColor blueColor]}];
//画一张图片。
UIImage* image = [UIImageimageNamed:@"head.png"];
//绘制图片和上面的底层实现是不一样的,绘制图片的时候坐标系的原点在左下角。
//通过翻转和平移显示正确的图片。
//CGContextScaleCTM(context, 1, -1);
//CGContextTranslateCTM(context, 0, -400);
// CGContextRotateCTM (context, M_PI);
CGContextDrawImage(context, CGRectMake(20, 20, 100, 100), [image CGImage]);
总结:实际开发中不要使用CGContextDrawImage和drawAtPoint去绘制图片和文字,效率非常低.
//UILabel,CATextLayer和UIImageView都对底层的绘制有优化,效率比绘制高很多.
//drawRect:永远不要手动去调用.如果需要刷新屏幕自定义绘制的内容,需要调用UIView的setNeedsDisplay
调用setNeedsDisplay后,系统绘制合适的时间去调用drawRect;方法刷新屏幕,节省系统的开销.
网友评论