自定义UIView使用路径绘图的步骤如下
- 1 调用 UIGraphicsGetCurrentContext()函数获取CGContextRef
- 2 调用CGContextBeginPath(CGContextRef __nullable c)函数开始定义路径
- 3 调用如下函数绘制子路径
- 4 如果路径添加完成,调用CGContextClosePath()函数关闭路径
- 5 设置路径绘制的相关属性:线宽,填充或路径颜色等
- 6 调用CGContextStrokePath(CGContextRef __nullable c),CGContextEOFillPath(CGContextRef __nullable c),CGContextFillPath(CGContextRef __nullable c),CGContextDrawPath(CGContextRef __nullable c,
CGPathDrawingMode mode)来填充路径或绘制路径边框,这些方法中最后一个方法可以代替前面几个方法,通过指定不同的CGPathDrawingMode。
内存中绘制图片
通过扩展UIView,重写drawRect:方法进行绘图,这种方法是直接在UIView控件上绘制所有的图形,由于每次控件显示出来时,drawRect:方法都会被调用,这就意味着每次控件显示时都要重新绘制所有的图形,很显然这种性能很不好,有的时候需要在内存中绘制图片,这样即可以导出到手机本地,也可以上传的网络上。
与直接在UIView上绘图不同,在内存中绘图时,需要开发者自己准备绘图环境,Quartz 2D 提供可一个非常敏捷的函数: UIGraphicsBeginImageContext(CGSize size),该函数用于准备绘图环境,当图形绘制完成后,可以调用UIGraphicsEndImageContext()函数结束绘图和关闭绘图环境,
在内存中绘图的步骤如下
- 1 调用UIGraphicsBeginImageContext(CGSize size)函数准备绘图环境
- 2 调用 UIGraphicsGetCurrentContext()函数获取CGContextRef
- 3 调用如下函数进行绘图
- 4 调用 UIGraphicsGetImageFromCurrentImageContext()函数获取当前绘制的图片
- 5 调用UIGraphicsEndImageContext()函数结束绘图,并关闭绘图环境
参考文章:《疯狂iOS讲义》