免费开源的iOS开发学习平台

核心动画CoreAnimation:1-简介

CoreAnimation框架是苹果的核心技术之一,iOS以及MacOS之所以大受欢迎,其中一个重要的原因在于能够提供非常炫酷的动画效果,同时其对硬件的要求很低。

CoreAnimation简介

Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。Core Animation的动画执行过程都是在后台操作的,因此不会阻塞主线程。

我们之前介绍了CALayer类,核心动画是直接作用于CALayer对象上的。如下图所示,当我们对一个UIView视图对象显示的内容进行旋转操作时,其本质是修改UIView的layer属性,对layer所展示的样式进行旋转操作后,再渲染到屏幕上。

CAAnimation类

CAAnimation类是一个抽象类,因此我们不会直接创建CAAnimation类的对象,而是使用其子类对象。其有3个子类,分别为:

  • CAPropertyAnimiation属性动画
  • CAAnimationGroup动画组
  • CATransition转场动画

其中,CAPropertyAnimiation属性动画又包含两个子类,分别为:

  • CABasicAnimation基本动画
  • CAKeyframeAnimation关键帧动画

在iOS9发布后,CABasicAnimation基本动画又添加了一个子类CASpringAnimation弹簧动画。

CAMediaTiming协议常用属性

CAAnimation类遵守了CAMediaTiming协议,在该协议中定义了一些常用的与动画播放相关的属性。常用的包括如下几个。

  • beginTime:动画开始播放的时间,默认为0,即立即开始播放
@property CFTimeInterval beginTime;
  • duration:动画持续的时间,默认为0
@property CFTimeInterval duration;
  • speed:动画播放的速度,默认为1,数值越大播放的速度越快,例如,当取值为2时,以两倍速度播放动画
@property float speed;
  • repeatCount:动画重复播放的次数
@property float repeatCount;
  • repeatDuration:动画重复播放的时间间隔
@property CFTimeInterval repeatDuration;
  • fillMode:定义动画播放完毕后的动作,一共有4个可选动作,默认为:kCAFillModeRemoved,即恢复原样
@property(copy) NSString *fillMode;
CA_EXTERN NSString * const kCAFillModeForwards;
CA_EXTERN NSString * const kCAFillModeBackwards;
CA_EXTERN NSString * const kCAFillModeBoth;
CA_EXTERN NSString * const kCAFillModeRemoved;

CAAnimation类的代理协议CAAnimationDelegate

CAAnimationDelegate是CAAnimation类的代理协议,其中定义了与动画播放相关的一些方法,主要包括:

  • 动画开始播放时调用的方法
- (void)animationDidStart:(CAAnimation *)anim;
  • 动画停止播放时调用的方法,停止播放的原因有可能是动画播放完成,也有可能是人为控制动画停止播放
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;