Core Animation的基本原理:
在Core Animation 做相关动画时,你的应用完全不会参与动画的绘制,这些动画绘制完全独立于你的应用进程。这意味着你可以继续在主线程做其他事情,并且不会影响到CA的性能。如果你阻塞了你的主线程,或者你在调试器中暂停了你的程序,你的动画还是会继续执行。
POP 动画库的基本原理:
POP 本质上是基于定时器的动画库,使用每秒 60 频率的定时器,使得动画刷新绘制频率与屏幕刷新频率一致。很多这类动画库都使用 CADisplayLink 做为一个回调源。
一旦定时器刷新,动画库会计算那些活动的东西的状态(通常是layer 属性,如 bound,opactiy,transform 等)。然后动画库提供最新计算的值给有动画的 layer 由于 layer 的一些参数已经被改变,你需要通知系统在屏幕上重绘一切东西,通过这种方式来做动画的。
POP 缺陷:
1.由于 POP 是基于定时器定时刷新添加动画的原理,那么如果将动画库运行在主线程上,会由于线程阻塞的问题导致动画效果出现卡顿、不流畅的情况。更为关键的是,你不能将动画效果放在子线程,因为你不能将对 view 和 layer 的操作放到主线程之外。
POP 受主线程阻塞的影响很大,在使用过程中,应避免在有可能发生主线程阻塞的情况下使用 POP ,避免制作卡顿的动画效果,产生不好的用户体验。
二者区别:
1.在主线程没有阻塞的情况下,两种动画库的表现并无差异。动画效果有点不一样,其在于时间函数。
做CA 显示动画时,默认的时间函数是kCAMediaTimingFunctionLinear
而POP 却是kCAMediaTimingFunctionEaseOut,只有手动把pop参数设置成kCAMediaTimingFunctionLinear,两者动画就一致了。
2.在主线程阻塞时,利用 POP 制作的动画视图,在每隔 1s 都会卡顿一下,而 CA 的视图却完全不受主线程阻塞的影响。