IOS 绘图 总结
Core Graphics
IOS中绘图的三种方式
- 在UIKit控件中,的drawInReat方法中通过 Core Graphics 框架来绘制图形
- 使用 Core Animation 层,并通过委托向Core Animation提供视图内容
- 通过 OpenGL ES 渲染图形
定义: Core Graphics 是一套基于C语言的API框架.使用 Quartz绘图引擎.
使用 Core Graphics 绘图
基本概念:图形上下文 CGContentRef
考虑到效率方面上的问题,通常我们不会创建。直接获取
通过
func UIGraphicsGetCurrentContext() -> CGContext?
获取图形上下文
默认情况下返回值为 nil.在调用这个方法之前调用
drawRect:
方法,视图将创建一个绘图上下文,并且设置为 the current context(当前上下文,也就是绘图图层栈栈顶的上下文).这个上下文context只会在drawRect:方法中存在.一旦调用此方法调用完成,这个上下文 context 将会被销毁.
如果你不是使用UIView去绘制,这时候你需要手动往栈顶入一个。使用下面的方法
UIGraphicsPushContext(_:)
这个方法可以在app中的任何线程中调用.
绘制路径 CGPath
CGPath也就是路径信息。CGPath可以确定 绘制边框的各种属性(颜色 粗细 拐点),边框内部区域的绘图属性, 绘制边框还是绘制边框内部
创建路径
CGMutablePathRef path = CGPathCreateMutable();
在绘制路径时
CGContextDrawPath(CGContextRef __nullable c, CGPathDrawingMode mode)
需要指定绘制路径时模式
CGPathDrawingMode
* kCGPathFill
Render the area contained within the path using the non-zero winding number rule.
* kCGPathEOFill
Render the area within the path using the even-odd rule.
* kCGPathStroke
Render a line along the path.
* kCGPathFillStroke
First fill and then stroke the path, using the nonzero winding number rule.
* kCGPathEOFillStroke
First fill and then stroke the path, using the even-odd rule.
仿射变换 CGAffineTransform
CGAffineTransform 是一个结构体
struct CGAffineTransform {
CGFloat a, b, c, d;
CGFloat tx, ty;
};
系统已经帮我封装好了一下方法
- 平移 CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)
- 缩放 CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
- 旋转 CGAffineTransformMakeRotation(CGFloat angle)
绘制虚线
CGFloat lengths[2] = { 18, 9 };
CGContextSetLineDash(context, 0, lengths, 2);
用于绘制虚线
绘制阴影
CGContextSetShadowWithColor(context, CGSizeMake(2, 2), 0, [UIColor blackColor].CGColor);
认识专有名词
line : 线
width: 宽度
cap: 顶点 路径的开始跟结束的点
join: 连接点
dash: 虚线