之前的几篇中我们学习了如何对Layer加入多个单独的动画,但是如何让他们同步并保持次序呢
对时间的掌握是比较复杂的,CAAnimationGroup应运而生CAAnimationGroup
CAAnimationGroup继承自CAAnimation,拥有CAAnimation的全部属性,比如beginTime\duration\toValue\removedOnCompletion\delegate等等
CAAnimationGroup有一个animations数组,用于添加动画,下面我们用示例来展示一下下面我们来创建一个CAAnimationGroup
let groupAnimation = CAAnimationGroup() groupAnimation.beginTime = CACurrentMediaTime() + 0.5groupAnimation.duration = 0.5groupAnimation.fillMode = kCAFillModeBackwards
下面我们创建一个scale动画
let scaleDown = CABasicAnimation(keyPath: "transform.scale")scaleDown.fromValue = 3.5scaleDown.toValue = 1.0
你也许会注意到我们并没有为动画指定fillMode\duration等等属性
没错,这些属性会由CAAnimationGroup提供我们创建另外二个动画let rotate = CABasicAnimation(keyPath: "transform.rotation")rotate.fromValue = CGFloat(M_PI_4)rotate.toValue = 0.0let fade = CABasicAnimation(keyPath: "opacity")fade.fromValue = 0.0fade.toValue = 1.0
现在我们将这些动画加入AnimationGroup,只需简单的将这几个动画加入animations数组中即可,最后将groupAnimation直接添加到Layer上
groupAnimation.animations = [scaleDown, rotate, fade]loginButton.layer.addAnimation(groupAnimation, forKey: nil)