Swift5:停止CABasicAnimation动画,就在动画结束时

Swift5: Stop CABasicAnimation animation, just when the animation is finished

我有 4 条边,每个角一条,带有动画。动画所做的唯一一件事就是改变该边框的 alpha。它从 0.05 到 1 那个 alpha。 我是这样处理动画的:

    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() 时,它会稍微跟随动画直到它 'finishes that cycle' 并且当 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")
        }
    }

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