核心动画(一) - 概念篇

概念

1、CALayer

CALayer是个与UIView很类似的概念,同样有backgroundColor、frame等相似的属性,我们可以将UIView看做一种特殊的CALayer。但实际上UIView是对CALayer封装,在CALayer的基础上再添加交互功能。UIView的显示必须依赖于CALayer。

我们同样可以跟新建view一样新建一个layer,然后添加到某个已有的layer上,同样可以对layer调整大小、位置、透明度等。
一般来说,layer可以有两种用途:一是对view相关属性的设置,包括圆角、阴影、边框等参数,更详细的参数请点击这里;二是实现对view的动画操控。因此对一个view进行动画,本质上是对该view的.layer进行动画操纵。

2、核心动画(Core Animation)

Core Animation官方文档定义:

这里写图片描述

翻译:

Core Animation是iOS和OS X平台上负责图形渲染与动画的基础框架。Core Animation可以作用于动画视图或者其他可视元素,为你完成了动画所需的大部分绘帧工作。你只需要配置少量的动画参数(如开始点的位置和结束点的位置)即可使用Core Animation的动画效果。Core Animation将大部分实际的绘图任务交给了图形硬件来处理,图形硬件会加速图形渲染的速度。这种自动化的图形加速技术让动画拥有更高的帧率并且显示效果更加平滑,不会加重CPU的负担而影响程序的运行速度。

3、Core Animation的层次结构

Core Animation所在的位置如下图所示:

这里写图片描述
  
  从上图中可以看到,核心动画位于UIKit的下一层,相比UIView动画,它可以实现更复杂的动画效果。

Core Animation包含的类有:

​CAAnimation
所有动画对象的父类,是个抽象类,不能直接使用。CAAnimation控制动画的持续时间和速度,以及removedOnCompletion(用于标识动画是否该在结束后自动释放,默认YES,为了防止内存泄露)。CAAnimation同时实现了一些协议,包括CAAction(允许CAAnimation的子类可以提供图层行为),以及CAMediaTiming。

​CAMediaTiming
CALayer和CAAnimation都实现了这个协议,协议中定义了在一段动画内用来控制逝去时间的属性的集合。

​CAPropertyAnimation
CAPropertyAnimation通过指定动画的keyPath作用于一个单一属性,CAAnimation通常应用于一个指定的CALayer,于是这里指的也就是一个图层的keyPath了。 CAPropertyAnimation并不能对layer进行动画操作,需要其子类实现动画操作。

​CABasicAnimation
基本动画,通过设定起始点,终点,时间,动画会沿着你这设定点进行移动。可以看做特殊的CAKeyFrameAnimation。

​CAKeyframeAnimation
关键帧动画,可定制度比CABasicAnimation高。

CAAnimationGroup
动画组:支持多个CABasicAnimation或者CAKeyframeAnimation动画同时执行。

​CATransition
过渡动画。

除此之外还,iOS9.0之后新增CASpringAnimation类,它实现弹簧效果的动画,是CABasicAnimation的子类。

Core Animation类的继承关系图如下:

这里写图片描述

在Core Animation中,动画抽象出来一个父类CAAnimation,CAAnimation实现了CAMediaTiming协议, CAPropertyAnimation、CATransition、CAAnimationGroup继承CAAnimation,CABasicAnimation、CAKeyframeAnimation继承CAPropertyAnimation。

4、Core Animation优点

  1)性能强大,使用硬件加速,可以同时向多个图层添加不同的动画效果
  2)接口易用,只需要少量的代码就可以实现复杂的动画效果。
  3)运行在后台线程中,在动画过程中可以响应交互事件(UIView动画默认动画过程中不响应交互事件)。

关于每个类的具体使用,将在稍后的下篇文章中介绍。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值