在前面的CAAnimation中,用到了多种种图层动画,既然是动画,所以他们都是动态的,每个动画都有自己的发生时间,接下来看看Core Animation是如何来跟踪时间的:

1.CAMediaTiming协议

CAMediaTiming定义了一段动画内用来控制逝去时间的属性集合,CALayer和CAAnimation都实现了这一协议,所以时间才能被任意一个图层或者动画控制。

时间的控制涉及到duration和repeatCount两个属性,它们默认都为0,但只是相对的,实际为0.25和1。一组动画总时长是由duration和repeatCount共同控制的:

duration是完成一次完整的动画所需要的时间
repeatCount是动画重复的次数
T=duration * repeatCount

2.相对时间
时间是相对的,每个动画都有自己的描述时间,可以独立的加速,延时,漂移。
beginTime指定动画开始的延时时间;
timeOffset指定动画开始的时间点(加入一个动画duration为2s,timeOffset为1,那么动画是从1这个时间点开始的,相当于起点变为1s时的动画位置)
speed是动画速度,默认为1,与duration成反比,若duration为1,速度在原来基础上变为两倍,那么,duration本来为1s的动画就会变为0.5s,就像车行驶一段固定路程,速度变大,相应的时间就变短了;
removeOnCompletion设置为NO,表示动画运行结束后保持之前状态,否则会回到原点,fillMode有四个值:

当 removedOnCompletion = NO;

kCAFillModeForwards //动画结束后保持当前状态
kCAFillModeBackwards //在动画开始执行结束后回到起点状态
kCAFillModeBoth //动画结束后保持当前状态,再次开始的时候回到第一次运行的起点
kCAFillModeRemoved //动画结束后回到起点状态