iOS動畫程式設計-Layer動畫[ 5 ] Animation Groups組合動畫

Hydrogen發表於2016-04-16

之前的幾篇中我們學習瞭如何對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)

相關文章