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