[iOS]画线功能实现

来源:互联网 发布:设计软件app 编辑:程序博客网 时间:2024/05/18 03:59

制作iOS软件的画线功能无非就是使用 OpenGLES 或者 Quartz2D。当然OpenGLES和 QuartzCode 的功能远不止这些,网上有很多介绍。

全新的iOS7.0诞生,开始支持 OpenGLES 3.0,没去仔细研究(http://www.cocoachina.com/gamedev/gameengine/2012/0808/4556.html)。

如果想学习 OpenGLES 2.0 可以去看看这位大侠的博客 http://blog.csdn.net/kesalin/article/category/1288827。

我之前也有写一个OpenGLES 2.0 入门级别的Demo 有兴趣的可以看看 http://download.csdn.net/detail/qq232053394/5724343 。


如果要实现一个简单的画线(修改 color/alpha/width、橡皮擦) 的功能,其实Quartz2D已经足够了。

相对OpenGLES来说,Quartz2D使用起来简单很多,代码量也少很多,也更容易理解。同时内部集成了贝塞尔曲线的算法可以直接画出贝塞尔曲线(iOS3.2+)。(使用OpenGLES的时候是自己写的代码,算法用的是二次B样条曲线的算法)

DEMO: https://github.com/Liuyu710/Quartz2DDraw.git



题外话:此Demo的数据结构设计的扩展性不够,因为只是为了测试Quartz2D的实现绘图的功能,如果需要做比较完整的绘图模块,需要重新设计线条的数据结构。简单的说一下思路吧:具体情况具体分析吧,这里的思路只是一个设计雏形。

1. 设计一个protocol,绘制的通用属性,例如:线条颜色,宽度,透明度  等等;

2. 设计一个抽象类,这里主要是为了扩展性,如果需求中有绘制线条以外的Object,就比较容易扩展。

3. 设计一个线条的类,继承自2步骤的类,根据线条的特征提供接口,例如:生产方法,增加点的方法,绘制方法 等等;(参考NSString的设计)

4. 设计线条的子类(类似CFString),既实际的线条(通过统一的线条类的生产方法创建的实际对象)。在这里根据每一种线条的个性特征完成接口实现,例如:贝塞尔曲线和折线的绘制方法就不同。

5. 到这里就可以很容易的用双数组设计Undo Redo操作了。

0 0
原创粉丝点击