【问题标题】:Swift5: Stop CABasicAnimation animation, just when the animation is finishedSwift5:停止 CABasicAnimation 动画,就在动画完成时
【发布时间】:2022-01-12 20:00:12
【问题描述】:

我有 4 个边,每个角一个,带有动画。动画所做的唯一事情就是改变该边框的 alpha。 alpha 从 0.05 变为 1。 我对动画是这样做的:

    private func startAnimation(duration: CFTimeInterval) {
        let cornerAnimate = CABasicAnimation(keyPath: #keyPath(CALayer.opacity))
        cornerAnimate.fromValue = 1
        cornerAnimate.toValue = 0.05
        cornerAnimate.duration = duration
        cornerAnimate.repeatCount = .infinity
        cornerAnimate.autoreverses = true
        cornerAnimate.isRemovedOnCompletion = false
        cornerAnimate.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
        
        corners.forEach { corner in
            corner.add(cornerAnimate, forKey: "opacity")
        }
    }

我在.infinity 中有它,因为那是我想做的。 我希望动画无限显示,当我告诉它时,随时停止它。

但我不希望它突然停止,我希望它在 alpha 为 1.0 时停止。我的意思是,当我调用函数stopAnimation() 时,它会跟随动画一点点,直到它“完成该循环”并且当 alpha 为 1.0 时它会停止它。

这是我试图做的,但动画仍然很突然:

    func stopAnimation() {
        let endAnimation = CABasicAnimation(keyPath: #keyPath(CALayer.opacity))
        var actualOpacity: Double = 0.05
        corners.forEach { corner in
            actualOpacity = corner.presentation()?.value(forKeyPath: "opacity") as! Double
        }

        
        endAnimation.fromValue = actualOpacity
        endAnimation.toValue = 1.0
        endAnimation.duration = 1.0
        corners.forEach { corner in
            corner.add(endAnimation, forKey: "end")
            corner.removeAnimation(forKey: "opacity")
        }
    }

【问题讨论】:

    标签: swift animation qr-code


    【解决方案1】:

    看起来您正在模拟器中构建应用程序(因为我可以看到鼠标移动),这似乎是一个仅影响模拟器的错误。我能够在模拟器中重现它,但不能在实际设备上重现。
    在设备上运行它,您应该不会看到该故障。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多