【问题标题】:CABasicAnimation animationDidStart did called, but animationDidStop never wasCABasicAnimation animationDidStart 确实调用了,但 animationDidStop 从来没有
【发布时间】:2016-01-28 18:24:18
【问题描述】:

sawanswerslot 关于这个topic,但不能解决我的特殊情况。

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 没有。

这怎么可能?

【问题讨论】:

  • 编辑您的问题以包含配置CABasicAnimation 的代码。
  • @rob-mayoff 感谢您的请求。我已经完成了。

标签: ios swift core-animation calayer ios-animations


【解决方案1】:

如果您等待更长时间,animationDidStop 将会被调用。但这肯定不是您所期望的行为。

我猜你想让动画运行 3 秒而不是 3000 秒;完成后,会收到来自委托回调的通知,即animationDidStop

因此,您需要进行更改:

animation.duration = 3 

和:

animation.toValue = 1

因此,您会看到animationDidStartanimationDidStop 都会被相应地调用。

【讨论】:

    【解决方案2】:

    animationDidStart 和 animationDidStop 都不起作用。

    我尝试在视图控制器中处理这一行:

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

    动画有效,但覆盖方法无效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多