之前的几篇中我们学习了如何对Layer加入多个单独的动画,但是如何让他们同步并保持次序呢
对时间的掌握是比较复杂的,CAAnimationGroup应运而生

CAAnimationGroup

CAAnimationGroup继承自CAAnimation,拥有CAAnimation的全部属性,比如beginTime\duration\toValue\removedOnCompletion\delegate等等
CAAnimationGroup有一个animations数组,用于添加动画,下面我们用示例来展示一下

下面我们来创建一个CAAnimationGroup

let groupAnimation = CAAnimationGroup() 
groupAnimation.beginTime = CACurrentMediaTime() + 0.5
groupAnimation.duration = 0.5
groupAnimation.fillMode = kCAFillModeBackwards

下面我们创建一个scale动画

let scaleDown = CABasicAnimation(keyPath: "transform.scale")
scaleDown.fromValue = 3.5
scaleDown.toValue = 1.0

你也许会注意到我们并没有为动画指定fillMode\duration等等属性
没错,这些属性会由CAAnimationGroup提供
我们创建另外二个动画


let rotate = CABasicAnimation(keyPath: "transform.rotation")
rotate.fromValue = CGFloat(M_PI_4)
rotate.toValue = 0.0
let fade = CABasicAnimation(keyPath: "opacity")
fade.fromValue = 0.0
fade.toValue = 1.0

现在我们将这些动画加入AnimationGroup,只需简单的将这几个动画加入animations数组中即可,最后将groupAnimation直接添加到Layer上

groupAnimation.animations = [scaleDown, rotate, fade]
loginButton.layer.addAnimation(groupAnimation, forKey: nil)

Hydrogen
2.5k 声望73 粉丝

Write code for fun.