Layer & Core Animation 技术的目的


Layer & Core Animation技术的目的,为了丝滑的用户体验(响应快速,高帧数以及动画流畅)

因而主线程不能有太多耗时任务

主线程(Main Thread)有很多任务需要执行,事件处理, 视图绘制更新回调派发等等,其中视图绘制更新显然是其中比较耗时的任务,所以对其进行优化

优化性能常见的考虑方向有优化计算(减少多余计算),缓存数据等方式。为了做到这些优化,需要建立数据模型,在iOS中是Layer

所以Layer存储着位图的状态信息,这个状态信息包含仿射变化矩阵(affine transform matrix),位置(position)坐标系统以及尺寸(bounds)颜色(color)缩放(scale)等等,而无关真实的显示。

有了这一层数据模型Layer之后,才能基于它做一些性能优化

当视图(view)与显示相关的数据信息发生变化,如:位置(position)颜色(color), 内容(content),如果仅是位图的状态信息发生变更, 那么就可以不需要重新绘制视图,而使用Core Animation(使用GPU计算渲染变换后的位图)。只有位图自身需要发生变化时,才需要进行重新绘制(使用CPU重新绘制)。

由此,1.减少重新绘制的调用 2.通过缓存的位图调用GPU处理生成新位图

将计算从主线程解放出来,同时减少重绘调用

引入的问题


数据模型(Layer)的功能执行需要对位图进行缓存,增加了内存占用

动画的执行,以及视图的更新,会需要异步等待GPU对于位图的处理完成复杂度提高,容易引入问题。

引用


Core Animation Program Guide