使用CAAnimation做layer图层的动画时,如果需要获取动画开始与结束的时机,则需要遵守CAAnimationDelegate协议,并实现协议中的两个方法:
func animationDidStart(_ anim: CAAnimation) {
let key = anim.value(forKey: animationKey) as! String
if key == anisGroupKey {
self.animationCompleted.value = false
}
}
func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
let key = anim.value(forKey: animationKey) as! String
if key == anisGroupKey {
self.animationCompleted.value = true
//self.anisGroup.delegate = nil
}
}
但是,为了使视图能够在用完后释放掉,需要在合适的时机设置动画对象的delegate为nil,即上述代码注释部分。
同时,还需要:
self.animationView.layer.removeAllAnimations()