之前的幾篇中我們學習瞭如何對Layer加入多個單獨的動畫,但是如何讓他們同步並保持次序呢
對時間的掌握是比較複雜的,CAAnimationGroup應運而生
CAAnimationGroup
CAAnimationGroup繼承自CAAnimation,擁有CAAnimation的全部屬性,比如beginTimeduration oValue
emovedOnCompletiondelegate等等
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
你也許會注意到我們並沒有為動畫指定fillModeduration等等屬性
沒錯,這些屬性會由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)