iOS动画编程-Layer动画[ 4 ] Animation Keys and Delegates

Delegate

Delegate是iOS中一种常用的模式,在动画中也是一样,我们可以通过Delegate实现对动画完成过程中开始、结束时动作的控制
如下是动画的两个代理方法

func animationDidStart(anim: CAAnimation)
func animationDidStop(anim: CAAnimation, finished flag: Bool)

使用方法也很简单,只需设置代理即可

flyRight.delegate = self

动画中KVC的应用

CAAnimation类支持KVC编程,这意味着我们可以将他们作为Dictionary对待

flyRight.setValue(username.layer, forKey: "layer")

通过这行代码,我们可以让CAAnimation简单的Model带上其作用的Layer
由于我们设置了Key,我们就可以在delegate中由此判断传入的是哪一个CAAnimation对象

if let name = anim.valueForKey("name") as? String { if name == "form" {
//form field found
} }

返回的是AnyObject?类型,需要自行转换为希望的类型

let layer = anim.valueForKey("layer") as? CALayer anim.setValue(nil, forKey: "layer")
let pulse = CABasicAnimation(keyPath: "transform.scale") pulse.fromValue = 1.25
pulse.toValue = 1.0
pulse.duration = 0.25
layer?.addAnimation(pulse, forKey: nil)

将layer属性的值设为nil可以

你可能感兴趣的:(ios)