Quartz 2D 学习笔记

Quartz 2D

C语言API,二维绘图引擎,基于Core Graphics框架,数据类型是以CG开头,方便自定义UI控件

图形上下文

Graphics Context :CGContextRef类型

作用:

  1. 保存绘图信息、绘图状态;
  2. 图形到设备输出的媒介;

自定义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的内存管理

  1. Create”或“Copy”的函数创建的对象,使用完后必须释放;
  2. Retain创建对象需要对应Release。

好记性不如烂笔头。

END

GithubZhaoBinLe

你可能感兴趣的:(Quartz 2D 学习笔记)