2

このトピックについて多く回答見ましたが、特定のケースを解決できません。

これは、完全なアニメーションとログのタイムラインを含むビデオです。

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はありません。

これはどのように可能ですか?

4

2 に答える 2

2

animationDidStopもっと待っていたら、電話がかかってきます。しかし、これは確かに、期待した動作ではありません。

アニメーションを 3000 秒ではなく 3 秒実行したいという意見が寄せられています。完了したら、デリゲート コールバックから通知を受け取りますanimationDidStop

そのため、代わりに次のように変更する必要があります。

animation.duration = 3 

と:

animation.toValue = 1

animationDidStartこれにより、との両方animationDidStopがそれに応じて呼び出されることがわかります。

于 2015-10-30T21:30:29.263 に答える
0

animationDidStart も animationDidStop も機能しませんでした。

ビューコントローラーでこの行を操作しようとしました:

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

delegate.play()

アニメーションは機能しましたが、オーバーライド メソッドは機能しませんでした。

于 2016-04-30T08:33:17.103 に答える