【发布时间】: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")
}
}
【问题讨论】: