现在的位置: 首页 > 移动开发 > 正文

IOS核心动画之高效绘图

2019年12月30日 移动开发 ⁄ 共 971字 ⁄ 字号 评论关闭

软件绘图

  术语绘图通常在CoreAnimation的上下文中指代软件绘图(意即:不由GPU协助的绘图)。在iOS中,软件绘图通常是由CoreGraphics框架完成来完成。但是,在一些必要的情况下,相比CoreAnimation和OpenGL,CoreGraphics要慢了不少。

  软件绘图不仅效率低,还会消耗可观的内存。CALayer只需要一些与自己相关的内存:只有它的寄宿图会消耗一定的内存空间。即使直接赋给contents属性一张图片,也不需要增加额外的照片存储大小。如果相同的一张图片被多个图层作为contents属性,那么他们将会共用同一块内存,而不是复制内存块。

  一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:1012951431,分享BAT,阿里面试题、面试经验,讨论技术,大家一起交流学习成长!希望帮助开发者少走弯路。

  但是一旦你实现了CALayerDelegate协议中的-drawLayer:inContext:方法或者UIView中的-drawRect:方法(其实就是前者的包装方法),图层就创建了一个绘制上下文,这个上下文需要的大小的内存可从这个算式得出:图层宽图层高4字节,宽高的单位均为像素。对于一个在RetinaiPad上的全屏图层来说,这个内存量就是204815264字节,相当于12MB内存,图层每次重绘的时候都需要重新抹掉内存然后重新分配。

  软件绘图的代价昂贵,除非绝对必要,你应该避免重绘你的视图。提高绘制性能的秘诀就在于尽量避免去绘制。

矢量图形

  我们用CoreGraphics来绘图的一个通常原因就是只是用图片或是图层效果不能轻易地绘制出矢量图形。矢量绘图包含一下这些:

  任意多边形(不仅仅是一个矩形)

  斜线或曲线

  文本

  渐变

  举个例子,展示了一个基本的画线应用。这个应用将用户的触摸手势转换成一个UIBezierPath上的点,然后绘制成视图。我们在一个UIView子类DrawingView中实现了所有的绘制逻辑,这个情况下我们没有用上viewcontroller。但是如果你喜欢你可以在viewcontroller中实现触摸事件处理。图13.1是代码运行结果。

  结束语:以上就是关于IOS核心动画之高效绘图的全部内容,更多内容请关注学步园。

抱歉!评论已关闭.