2

I saw a lotanswers об этом topic, но не может решить мой конкретный случай.CABasicAnimation animationDidStart действительно вызывал, но анимацияDidStop никогда не была

Here is a video with complete animation and logging timeline

class AnimationDelegate: UIView { 

    deinit { 
     print("AnimationDelegate deinitialized") 
    } 

    override func animationDidStart(anim: CAAnimation) { 
     print("animationDidStart") 
    } 

    override func animationDidStop(anim: CAAnimation, finished flag: Bool) { 
     print("animationDidStop") 
    } 

    func play() { 
     let line_1 = CAShapeLayer() 
     ... 

     let animation = CABasicAnimation() 
     animation.delegate = self 
     animation.duration = 3000 
     animation.repeatCount = 1 
     animation.keyPath = "strokeEnd" 
     animation.fromValue = 0 
     animation.toValue = 360 

     layer.addSublayer(line_1) 
     line_1.addAnimation(animation, forKey: "StrokeAnimation") 

    } 
} 

let delegate = AnimationDelegate(frame: container.bounds) 
container.addSubview(delegate) 

delegate.play() 

Проблема заключается в том animationDidStart называется, но animationDidStop нет.

Как это возможно?

+0

Редактируйте свой вопрос, чтобы включить код, который настраивает 'CABasicAnimation'. –

+0

@ rob-mayoff спасибо вам за запрос. я все. – George

ответ

2

animationDidStop будет вызван, если бы вы ждали дольше. Но это, конечно, не то поведение, которое вы ожидали.

Полагаю, что вы хотите, чтобы анимация запускалась в течение 3 секунд вместо 3000; и после его завершения получают уведомление от обратного вызова делегата, которое равно animationDidStop.

Таким образом, вместо этого, вам нужно будет изменить:

animation.duration = 3 

и:

animation.toValue = 1 

Таким образом, вы бы увидели, что оба animationDidStart и animationDidStop будут вызваны соответствующим образом.

0

Ни анимацияDidStart, ни анимацияDidStop не работали.

Я стараюсь работать эти строки в контроллере представления:

let delegate = AnimationDelegate(frame: container.bounds) 
container.addSubview(delegate) 

delegate.play() 

Anitmation работал, но переопределяют методы не работают.

Смежные вопросы