iOS踩过的坑之CAAnimation的Delegate

使用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()

你可能感兴趣的:(iOS踩过的坑之CAAnimation的Delegate)