16.1.2 CAAnimation

16.1.2 CAAnimation

CAAnimation是一个抽象类,它是所有动画类的基类。CAAnimation为CAMediaTiming和CAAction 协议提供基本支持。我们不能直接创建CAAnimation的实例,如果要为Core Animation的图层或 SceneKit实例设置动画,需要使用其子类CABasicAnimation、CAKeyframeAnimation、CAAnimation Group或CATransition的实例。下面介绍下这几个子类的使用方式:

1.CABasicAnimation

为图层的基本属性(大小、透明度、位置、背景色等)提供单个关键帧动画的类。使用从 CAA nimation继承的init(keyPath:)方法来创建CABasicAnimation的实例,指定用于动画时改变的图层属性的keyPath。

我们可以为图层的标量属性(例如透明度)设置动画,代码如下:我们还可以为其他图层的对象属性(例如背景色)设置动画,代码如下:

我们还可以使用其他的keyPath设置动画,它们都是来自CALayer中的属性名。

2.CAKeyframeAnimation

为图层的基本属性(大小、透明度、位置、背景色等)提供多个关键帧动画的类。使用从CAAnimation继承的init(keyPath:)方法来创建CAKeyframeAnimation的实例,指定用于动画时改变图层属性的keyPath。

我们可以指定用于控制计时和动画行为的关键帧的值。对于大多数类型的动画,我们可以使用values和keyTimes属性指定关键帧的属性值。在动画期间,Core Animation通过在我们提供的多个值之间进行插值来生成中间值。在设置坐标点的值(例如图层的位置)的动画时,我们可以指定要跟随的点的路径,而不是单个值。动画的节奏由我们提供的时间信息控制。下面是一个修改背景色的示例,代码如下:

这个动画中,改变了图层的背景颜色。有四个事件点的渐变,分别在动画时间的25%、50%以及100%作为关键帧颜色进行设置。

3.CAAnimationGroup

为图层组合多个动画的类。这里需要注意:组合的动画是运行在CAAnimationGroup实例指定的时间空间中的。组合动画的持续时间不会缩放到其CAAnimationGroup的持续时间,相反,组合动画会被剪切到CAAnimationGroup的持续时间。例如CAAnimationGroup的持续时间为5秒,而其包括的组合动画时间为10秒,那么仅显示组合动画的前5秒。下面是一个组合的动画实例,其同时改变了图层的透明度和大小,代码如下:

当图层变为原来的三倍大时,透明度也变为零,图层消失。

4.CATransition

在图层状态之间提供动画过渡的类。我们可以通过创建和添加CATransition实例,给图层状态之间的切换提供过渡。默认的过渡效果是交叉渐变,我们也可以从一组预定义的过渡效果中选取其他的内容。下面的实例通过创建CATransition达到状态切换的过渡效果,代码如下:

这段代码需要在一个UIViewController的子类中实现,在视图控制器的view属性上添加一个CATextLayer的图层,背景色设置为红,字符串展示为“Red”。随后定义runTransition()方法,在其中为transitioningLayer增加过渡动画CATransition的实例,会将其背景色从红变蓝,并且文字变为“Blue”。最终的展示结果是:如果在页面初始化时调用了runTransition()方法,当页面产生转场动画时,这个CATextLayer会从屏幕的左侧缓慢进入,直到指定位置,而一开始的红色背景色最终会变为蓝色。