首页 > 解决方案 > 如何修复ios15中丢失的淡入淡出动画CATransition?

问题描述

我有一个自下而上的文本推送动画。在 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

标签: iosanimationcore-animationios15catransition

解决方案


您完全正确,这种行为在 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 动画等。


推荐阅读