如何修复 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 动画等。