【Objective-c】动画学习笔记(二)Core Animation 核心动画

在上一编(视图动画) 已经简单的介绍了iOS的动画,UIView Animation是UIKit框架基于Core Animation 封装的一个动画API,依框架封装的初衷就是让功能实现更简单、更快捷,但有利必有弊,再次封装的接口只是为了某一特定需求而做的,折损了原有的可塑造性。所以实现一些更细腻、更酷炫的动画就需要了解Core Animation框架

Snip20161030_1.png

有一个很形象的比喻来理解核心动画:

动画就是一部电影,CALayer是演员,CAAnimation是电影剧本,而把CAAnimation添加到CALayer就是播放电影


重要的角色 CALayer

说到动画就必须提到CALayer,那么什么是CALayer,到底有什么作用?
根据官方介绍

Paste_Image.png

大致意思是:CALayer类是负责管理图像内容和动画的执行
其实在开发中,我们能看得见摸得着的UIButton、UILabel、UITextView等等,都是UIView,但是UIView能够显示是因为其内部包含一个layer 属性。在创建UIView对象时,UIView内部就会自动创建一个CALayer图层,通过self.view.layer可以访问到这个图层。当UIView要显示到屏幕上时,就会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的layer图层,绘图完毕后,系统会将图层拷贝到屏幕上,完成UIView的显示。这里就说说UIView与CALayer的区别:UIView是负责响应事件(继承于UIResponder),CALayer是负责内容渲染显示以及动画的执行,从某种意义来说UIView可以算是一个特殊的CALayer。(这里深深体会到OC三个特性对于编程的重要:继承、封装和多态,将不同的功能封装到不同的类中,各执其职,清楚明了)
CALayer的常用属性backgroundColor、border、cornerRadius、shadow。
Snip20161030_2.png

Snip20161030_3.png

Snip20161030_4.png

创建CALayer对象

+ (instancetype)layer;
- (instancetype)initWithLayer:(id)layer;
- (instancetype)init;

讲完CALayer,介绍主角核心动画:Core Animation

Core Animation 的动画执行过程都是在后台操作的,不会柱塞主线程,并且Core Animation是直接作用在CALayer上的。以下Core Animation的类继承结构

Snip20161030_5.png

CAAnimation是所有动画类的父类,但是它不能直接使用,只能事业它的子类,包括CAAnimationGroup、CABasicAnimation、CAKeyFrameAnimation、CATransition

常用的属性说明:
duration:动画的持续时间
repeatCount:动画的重复次数
repeatDuration:动画重复的时间
removedOnCompletion:默认是YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为看CAFillModeForwards
fillMode:决定当前对象在非active时间段的行为,比如动画开始之前,动画结束之后
beginTime:可以用来设置动画延迟执行时间,若想延迟2S,就设置为CAurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
timingFunction:速度控制函数,控制动画运行的节奏
delegate:动画代理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容