@chenbinghua
2015-09-14T14:03:36.000000Z
字数 1455
阅读 1508
iOS笔记
阅读参考:Quartz2D介绍
Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统
Quartz2D最重要的作用是:自定义控件!自定义控件!自定义控件!重要的事情说三遍。
事实上iOS中大部分控件的内容都是通过Quartz2D画出来的
首先,得有图形上下文,因为它能保存绘图信息,并且决定着绘制到什么地方去
其次,那个图形上下文必须跟view相关联,才能将内容绘制到view上面
自定义view的步骤
View内部有个layer(图层)属性,drawRect:方法中取得的是一个Layer Graphics Context,因此,绘制的东西其实是绘制到view的layer上去了。
View之所以能显示东西,完全是因为它内部的layer。
新建CBHView类,继承UIView重写- (void)drawRect:(CGRect)rect方法- (void)drawRect:(CGRect)rect {// 1.获取上下文CGContextRef ctx = UIGraphicsGetCurrentContext();// 2.描述路径// 2.1设置起点CGContextMoveToPoint(ctx, 50, 50);// 2.2添加线段CGContextAddLineToPoint(ctx, 100, 100);// 3.渲染上下文CGContextStrokePath(ctx);// CGContextFillPath(ctx); 填充线段包围的区域}

UIKit框架已经封装了一些绘图功能- (void)drawRect:(CGRect)rect {// 创建贝瑟尔路线,底层获取drawRect:方法内的Layer Graphics Context图形上下文UIBezierPath *path = [UIBezierPath bezierPath];[path moveToPoint:CGPointMake(50, 50)];[path addLineToPoint:CGPointMake(200, 200)];// 线宽path.lineWidth = 10;// 颜色[[UIColor redColor] set];// 渲染上下文[path stroke];}
新建一个起点void CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y)添加新的线段到某个点void CGContextAddLineToPoint(CGContextRef c, CGFloat x, CGFloat y)添加一个矩形void CGContextAddRect(CGContextRef c, CGRect rect)添加一个椭圆void CGContextAddEllipseInRect(CGContextRef context, CGRect rect)添加一个圆弧void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y,CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)
