一、图形上下文
一个CGContextRef类型的属性,用于:
- 保存绘图信息、绘图状态
- 决定绘制的输出目标
类型:
- Bitmap Graphics Context
- PDF Graphics Context
- Window Graphics Context
- Layer Graphics Context
- Printer Graphics Context
</br>
二、利用Quartz2D自定义控件的流程
前提条件:
- 确保具有图形上下文
- 图形上下文必须跟view相关联
步骤与流程:
- 新建一个类,继承自UIView
- 实现
-(void)drawRect:(CGRect)rect
方法(系统调用该方法会自动创建一个与View相关联的上下文),在该方法中 - 取得跟当前view相关联的图形上下文
- 绘制相应的图形内容
- 利用图形上下文将绘制的内容渲染显示到view上面
</br>
三、drawRect方法
调用时机:
系统自动调用。当view显示的时候调用,调用时机在父控件的viewWillAppear:
方法和viewDidAppear:
方法两者的调用间隔之间
参数含义:
rect
表示当前view的frame
步骤:
- 获取上下文
调用UIGraphicsGetCurrentContext()
方法获取当前上下文 - 绘制路径
- 调用
[UIBezierPath bezierPath]
方法获取贝塞尔路径 - 描绘路径
- 把绘制的内容保存到上下文中
调用CGContextAddPath()
方法 - 把上下文的内容显示到view上(渲染到view的layer上)
调用stroke方法或fill方法
快速步骤:
直接对UIBezierPath对象调用stroke
或fill
方法(本质上是自动调用了方法,获取上下文并把路径添加到了上下文中)
</br>
四、上下文状态栈
上下文的状态可以存放到上下文状态栈中,通过调用CGContextSaveGState()
方法即可把当前上下文的状态放到栈顶保存起来。
调用CGContextRestoreGState()
方法即可读取状态栈中上下文的状态,取得处于栈顶的上下文状态。
</br>
五、矩阵操作
在对把路径添加到上下文之前,可以对上下文进行平移、旋转、缩放操作。分别调用
CGContextTranslateCTM()
CGContextRotateCTM()
CGContextScaleCTM()
三个方法即可
</br>
使用UIKit进行绘图
绘制文字
- 可以对NSString对象调用
drawAtPoint:withAttributes:
,将字符串绘制到View的指定位置,并带有指定的属性。 - 可以对NSString对象调用
drawInRect:withAttributes:
,将字符串绘制到指定区域,并带有指定的属性。与上一个方法的区别在于会自动换行。
绘制图片
- 可以对UIImage对象调用
drawAtPoint:
,将图片按照原始图片大小绘制到View的指定位置 - 可以对UIImage对象调用
drawInRect:
,将图片填充到指定区域中 - 可以对UIImage对象调用
drawAsPatternInRect:
,将图片以平铺的方式绘制到指定区域
注意点
使用UIKit框架中的方法进行绘制也需要上下文,因此也应该在drawRect:
方法中绘制
</br>