Core Animation是苹果提供的一套基于绘图的动画框架,在iOS的绘图框架中最底层为图形硬件服务,上面是使用C语言封装的一台应用层API,在上面就是Core Animation框架。
Core Animation框架中最核心的类是CAAnimation,封装了动画对象的基本属性,包括三个子类:
CAPropertyAnimation类:创建属性动画.
CAAnimationGroup类:创建组合动画.
CATransition类:转场动画.
iOS绘图技术
1.屏幕渲染原理
页面的卡顿是由于页面刷新频率过低造成的,正常是每秒刷新60次。
为了解决GPU的图像渲染速度和显示屏的刷新速度一致,屏幕渲染时会采用缓存区加垂直同步的技术来保证不产生屏幕撕裂。
缓存区是指当GPU渲染图形数据之后,先将其缓存起来,屏幕需要刷新的时候再从缓存区获取刷新,为了保证在缓存区中的图像数据被屏幕都去完成之后再放入新的缓存数据,缓存区还分两部分,一部分是帧缓存区,一部分你是后备缓存区,当帧缓存区被屏幕渲染之后后备缓存去的数据会被复制到帧缓存区中,等屏幕下次刷新使用。
2.iOS页面内渲染过程
应用程序---》UIkit---》Core Graphics,Core Animation,Core Image---》OpenGL ES ----》GPU 驱动----》显示屏渲染
3.页面性能优化
1)减少图层数量,和变化
CPU:对象创建耗时,布局计算耗时,图片加载解压耗时,图像绘制数据处理耗时
1.布局的计算 - 如果你的视图层级太过于复杂,或者视图需要重复多次进行布局,尤其是在使用 Auto Layout 进行自动布局时,对性能影响尤为严重;
2.视图的惰性加载 - 在 iOS 中只有当视图控制器的视图显示到屏幕时才会加载;
3.解压图片 - iOS 通常会在真正绘制时才会解码图片,对于一个较大的图片,无论是直接或间接使用 UIImageView 或者绘制到 Core Graphics 中,都需要对图片进行解压;
4.大多数的 CALayer 的属性都是由 GPU 来绘制的,比如图片的圆角、变换、应用纹理;但是过多的几何结构、重绘、离屏绘制(Offscrren)以及过大的图片都会导致 GPU 的性能明显降低。
2)合理使用离屏渲染
离屏渲染:在当前屏幕缓存区外开辟一个新的缓存区进行渲染。
离屏渲染本身是图形渲染技术的一种优化,可以在图像真正被渲染之前做很多与处理的事情,比如图层合成等;
但是离屏渲染的使用代价是很高的,首先,需要额外开辟一块缓存区进行渲染操作,其次,在离屏渲染结束后,要将离屏渲染的内容在屏幕上显示,需要切换绘制上下文。不合理的触发离屏渲染会造成严重的性能损耗。
使用了图片的UIIButton,UILabel等组件的圆角会触发离屏渲染,建议使用圆角图片。