#Quartz 2D绘图 ##Quartz 2D 概述git
##Graphics Contextgithub
'画布' “page”canvas
// 1. 将自定义视图添加到视图上显示 - (void)viewDidLoad { [super viewDidLoad]; CoreGraphicsView *cgView = [[CoreGraphicsView alloc] initWithFrame:self.view.bounds]; cgView.backgroundColor = [UIColor blackColor]; [self.view addSubview:cgView]; // 2. 在自定义的DrawView 中绘图,当视图显示时就会调用下面的代码。 - (void)drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextAddRect(ctx, CGRectMake(10, 20, 100, 100)); CGContextSetFillColorWithColor(ctx, [UIColor grayColor].CGColor); CGContextDrawPath(ctx, kCGPathFill); } }
###Graphics Context 读解c#
##Quartz 2D坐标系框架
坐标系统定义是被绘制到Page上的对象的位置及⼤小范围,如图所示。咱们在用户空间坐标系统(user-space coordination system,简称⽤户空间)中指定图形的位置及⼤小。坐标值是⽤浮点数来定义的。函数
###UIKit坐标系:字体
###坐标系的转换:spa
注意:
转换坐标系前,使用CGContextSaveGState(CGContextRef c)保存当前上下文状态 坐标系转换后,使用CGContextRestoreGState(CGContextRef c)能够恢复以前保存的上下⽂状态 ##基本绘图 ###Quartz 2D绘图流程:code
绘制简单图形代码对象
- (void)drawGraphics { CGContextRef cxt = UIGraphicsGetCurrentContext(); CGContextSetStrokeColorWithColor(cxt, [UIColor redColor].CGColor); CGContextSetLineWidth(cxt, 5); // 一、绘制矩形 CGContextAddRect(cxt, CGRectMake(20, 100, 320, 150)); CGContextDrawPath(cxt, kCGPathStroke); // 保存上下文状态(入栈) CGContextSaveGState(cxt); // 二、绘制内切椭圆、圆 CGContextAddEllipseInRect(cxt, CGRectMake(20, 260, 320, 150)); CGContextSetStrokeColorWithColor(cxt, [UIColor orangeColor].CGColor); CGContextSetLineWidth(cxt, 10); CGContextDrawPath(cxt, kCGPathStroke); // 恢复上下文状态(出栈) CGContextRestoreGState(cxt); // 三、绘制圆弧 CGContextMoveToPoint(cxt, 250, 500); CGContextAddArc(cxt, 200, 500, 50, 0, M_PI_2, NO); // 四、绘制贝塞尔曲线 // cpx、cpy: 控制点的坐标, x、y目标点的坐标 // CGContextAddQuadCurveToPoint(cxt, <#CGFloat cpx#>, <#CGFloat cpy#>, <#CGFloat x#>, <#CGFloat y#>) // CGContextAddCurveToPoint(<#CGContextRef _Nullable c#>, <#CGFloat cp1x#>, <#CGFloat cp1y#>, <#CGFloat cp2x#>, <#CGFloat cp2y#>, <#CGFloat x#>, <#CGFloat y#>) CGContextDrawPath(cxt, kCGPathStroke); }
###路径:
- (void)drawText { CGRect rect = CGRectMake(20, 30, 200, 20); [text drawInRect:rect withAttributes:@{NSForegroundColorAttributeName : [UIColor redColor], NSBackgroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName : [UIFont systemFontOfSize:20]}]; }
###绘制图形的基本属性
- (void)drawLines { // 一、获取当前绘图上下文(绘图环境)、能够理解为建立一块画布 CGContextRef cxt = UIGraphicsGetCurrentContext(); // 二、移动到某个点 CGContextMoveToPoint(cxt, 20, 100); // 三、添加一条直线到某个点 CGContextAddLineToPoint(cxt, 300, 100); CGContextAddLineToPoint(cxt, 160, 300); // 闭合路径 CGContextClosePath(cxt); // 四、设置描边和填充颜色 CGContextSetStrokeColorWithColor(cxt, [UIColor redColor].CGColor); //CGContextSetRGBStrokeColor(cxt, 200/255.0, 300/255.0, 10/255.0, 1); // CGContextSetCMYKStrokeColor(cxt, 0.1, 0.3, 0.5, 0.8, 1); CGContextSetFillColorWithColor(cxt, [UIColor whiteColor].CGColor); // 五、设置线条宽度 CGContextSetLineWidth(cxt, 5); // 六、设置线头样式 CGContextSetLineCap(cxt, kCGLineCapRound); // 七、设置线条链接点的样式 CGContextSetLineJoin(cxt, kCGLineJoinRound); // 八、设置虚线 // CGFloat lengths[] = {2,10,2}; // CGContextSetLineDash(cxt, 0, lengths, 3); // 九、是否开启抗锯齿 CGContextSetShouldAntialias(cxt, YES); // 十、绘制描边 // CGContextStrokePath(cxt); // 十一、绘制填充 // CGContextFillPath(cxt); // 十二、绘制描边、填充、描边和填充、奇偶填充:kCGPathFill,kCGPathEOFill,kCGPathStroke,kCGPathFillStroke, kCGPathEOFillStroke CGContextDrawPath(cxt, kCGPathFillStroke); }
###构建路径的函数说明:
###绘制路径的函数说明:
###绘图状态参数说明:
CGContextSetLineWidth// 线条宽度 CGContextSetBlendMode // 设置混合模式 CGContextSetShouldAntialias // 设置抗锯齿效果 CGContextSetLineCap // 设置线条收尾点样式 CGContextSetLineJoin // 设置线条链接点样式 CGContextSetLineDash// 设置虚线
##绘图实战 Demo下载
简单的绘图