2015-10-28 67 views
2

saw a lotanswers關於此topic,但無法解決我的特殊情況。CABasicAnimation animationDidStart確實打過電話,但是animationDidStop從來不是

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 

因此,你會看到,無論是animationDidStartanimationDidStop將得到相應的調用。

0

animationDidStart和animationDidStop都不起作用。

我嘗試在一個視圖控制器來解決這個行:

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

delegate.play() 

Anitmation工作,但覆蓋的方法沒有奏效。

相關問題