如何修复 ios15 中缺失的淡入淡出动画 CATransition?
How to fix missing fade animation CATransition in ios15?
我有一个自下而上的文本推送动画。在 iOS 14 及更早版本中,它使用淡入淡出动画。从 iOS 15 开始,行为发生了变化:隐式淡入淡出消失了。关于如何取回它的任何想法?
需要新图层进入不透明度0到1,旧图层进入不透明度0。
let pushAnimation: CATransition = {
let animation = CATransition()
animation.timingFunction = CAMediaTimingFunction(name: .easeIn)
animation.type = .push
animation.subtype = .fromTop
animation.duration = 0.5
return animation
}()
...
label.layer.add(pushAnimation, forKey: nil)
label.text = newText
您完全正确,此行为已在 iOS 15 中更改。您可能想向 Apple 提交错误报告。然而,隐含的不透明度变化可以说总是错误的,所以他们可能会回复说这现在按预期工作了。
此处的最小解决方案可能是为您的过渡添加淡入淡出动画:
let ba = CABasicAnimation(keyPath: #keyPath(CALayer.opacity))
ba.duration = 0.5
ba.fromValue = 0
label.layer.add(ba, forKey: nil)
然而事实是,CATransition 非常简单,如果你想要动画你可以控制,你应该使用真正的 动画。例如,视图过渡动画将允许您用一个视图替换另一个视图,同时以您希望的任何方式设置动画,完全控制位置动画、alpha 动画等。
我有一个自下而上的文本推送动画。在 iOS 14 及更早版本中,它使用淡入淡出动画。从 iOS 15 开始,行为发生了变化:隐式淡入淡出消失了。关于如何取回它的任何想法?
需要新图层进入不透明度0到1,旧图层进入不透明度0。
let pushAnimation: CATransition = {
let animation = CATransition()
animation.timingFunction = CAMediaTimingFunction(name: .easeIn)
animation.type = .push
animation.subtype = .fromTop
animation.duration = 0.5
return animation
}()
...
label.layer.add(pushAnimation, forKey: nil)
label.text = newText
您完全正确,此行为已在 iOS 15 中更改。您可能想向 Apple 提交错误报告。然而,隐含的不透明度变化可以说总是错误的,所以他们可能会回复说这现在按预期工作了。
此处的最小解决方案可能是为您的过渡添加淡入淡出动画:
let ba = CABasicAnimation(keyPath: #keyPath(CALayer.opacity))
ba.duration = 0.5
ba.fromValue = 0
label.layer.add(ba, forKey: nil)
然而事实是,CATransition 非常简单,如果你想要动画你可以控制,你应该使用真正的 动画。例如,视图过渡动画将允许您用一个视图替换另一个视图,同时以您希望的任何方式设置动画,完全控制位置动画、alpha 动画等。