Quartz 2D
C语言API,二维绘图引擎,基于Core Graphics框架,数据类型是以CG开头,方便自定义UI控件
图形上下文
Graphics Context :CGContextRef类型
作用:
- 保存绘图信息、绘图状态;
- 图形到设备输出的媒介;
自定义view
重写drawRect
- (void)drawRect:(CGRect)rect {
//获取与当前view相关联的图形上下文
CGContextRef context = UIGraphicsGetCurrentContext();
}
注意:调用setNeedsDisplay | setNeedsDisplayInRect ->调用drawRect 手动调用drawRect不能获取和View相关联的上下文
常规绘图步骤
- (void)drawRect:(CGRect)rect {
//获得图形上下文:
CGContextRef context = UIGraphicsGetCurrentContext();
//设置属性
CGContextSetLineWidth(context, 5.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
//拼接路径
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, 100, 100);
//绘制路径
CGContextStrokePath(context);
}
常见函数
拼接路径函数 | 说明 |
---|---|
CGContextMoveToPoint | 新建一个起点 |
CGContextAddLineToPoint | 添加线段到某个点 |
CGContextAddRect | 添加矩形 |
CGContextAddEllipseInRect | 添加椭圆 |
CGContextAddArc | 添加圆弧 |
绘制路径函数 | 说明 |
---|---|
CGContextDrawPath | Mode参数决定绘制的模式 |
CGContextStrokePath | 绘制空心路径(描边) |
CGContextFillPath | 绘制实心路径 |
CGContextDrawPath说明
使用样例 | 说明 |
---|---|
CGContextDrawPath(context, kCGPathFill) | 实心路径 |
CGContextDrawPath(context, kCGPathEOFill) | 使用奇偶规则填充路径。 |
CGContextDrawPath(context, kCGPathStroke) | 描边路径 |
CGContextDrawPath(context, kCGPathFillStroke) | 填充并描边路径。 |
CGContextDrawPath(context, kCGPathEOFillStroke) | 使用奇偶规则填充并描边路径。 |
非零缠绕数填充
:默认的填充模式,从多边形的区域范围内找任意一个点,当多边形的边是左往右穿过射线的话过去就+1,从右往左穿过射线就-1,如果最后为0,就不填充,否则就填充),不绘制边框,简单的画个图什么是从左往右,什么是从右往左,内部的点都是不填充的,环绕数都为0;
奇偶规则填充
:被覆盖过奇数点的填充,被覆盖过偶数点的不填充 。从任意位置p作一条射线,若与该射线相交的多边形边的数目为奇数,则p是在多边形内,就去填充,否则就不填充。
注:非零缠绕数的填充规则与绘制的方向有关、偶数-奇数规则则与方向无关
矩阵操作函数 | 说明 |
---|---|
CGContextScaleCTM | 缩放 |
CGContextRotateCTM | 旋转 |
CGContextTranslateCTM | 平移 |
描边属性
函数 | 说明 | 备注 |
---|---|---|
CGContextSetLineWidth | 描边路径的宽度 | |
CGContextSetLineJoin | 描边的连接点样式 | Miter(尖角),Round(圆角),Bevel(平角) |
CGContextSetStrokeColor | 描边颜色 | |
CGContextSetLineCap | 直线端点样式 | Butt,Round,Square |
CGContextSetMiterLimit | 转角的量级 | |
CGContextSetLineDash | 虚线模式 | 指定虚线数组和虚线相位控制虚线大小和位置 |
CGContextSetStrokeColorSpace | 描边颜色空间 | 封装了颜色和颜色空间的CGColorRef |
CGContextSetStrokePattern | 笔触模式 |
Quartz2D的内存管理
- Create”或“Copy”的函数创建的对象,使用完后必须释放;
- Retain创建对象需要对应Release。
好记性不如烂笔头。
网友评论