序
在百度和简书上找到很多实现的代码。找到的实现方式对于刚接触的人来说,很乱,很多方式。为何呢:因为实现画图的代码有分三种。而大部分的博文里面都只介绍了其中的一种方式而已,所以我根据几种实现方式进行了统计,自己整理了如下的文章。并且给出自己的建议和理解。
如果存在不合理的地方请指出。
1.实现画图有三种代码可以实现:
UIBezierPath(贝塞尔曲线路径):使用面向对象方式编码
CGContextRef(图形上下文):是用函数式编码
CGMutablePathRef(图形路径):是用函数式编码
2.都能够实现简单的画图技巧
3.画图的几个注意点
3.1颜色:线条和填充
3.3线宽
3.3画图逻辑(图形的组成步骤)
3.4作画(画线还是填充)
3.5释放CGPathRef
3.6是否有虚线(lineDashPhase,lineDashPattern)
3.7是否完整的画图(StrokeStart,StrokeEnd)
4.实现思路
1.在drawRect方法中画图:使用三种方法都行(参考第一点)
2.使用CAShapeLayer(继承CALayer)在这个画布上作画,可以把这个图层添加到任何地方。
在使用画布的方法中可以使用贝塞尔曲线路径(UIBezierPath)和图形路径(CGMutablePathRef)
在CAShapeLayer有个属性是path,就是给定图形路径。而使用UIBezierPath有个属性是CGPath。
5.个人总结和建议
建议使用CAShapeLayer和UIBezierPath方式完成画图,原因有:
1.都是面向对象设计,易理解。
2.使用图层可以在任何地方画图,不受限于drawRect的位置。
3.对于要做动画的代码而言,画图的代码完全可以复用。直接使用图形的路径就可以做到简单的动画。
4.不需要手动释放对象。(Ref结尾的需要手动释放内存(CGPathRef),除非是系统运行时默认会带上的(CGContextRef))