ios - 如何修复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
解决方案
您完全正确,这种行为在 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 动画等。
推荐阅读
- flutter - 您好,我正在尝试为我的项目构建 Apk,但遇到了这些错误,我尝试了互联网上的所有解决方案,但仍然无法正常工作.. 有什么想法吗?
- ios - 当我使用高于 11.2.1 的 Xcode 版本构建时,调用 SKProductsRequest 失败
- pandas - Pandas Python如何处理出现在数据框中的问号
- android - Paging3 不确定如何转换 PagingSource
- sql - 如何处理空值的转换错误?
- javascript - 错误:让通道 = message.mentions.channels.first() ^ TypeError:无法读取未定义的属性“通道”
- apache-spark - 雪花将镶木地板中的布尔值解释为 NULL?
- android - 离子科尔多瓦振动不适用于 Android 10
- javascript - Nodejs Mongodb - 打印时文档属性为“未定义”
- bokeh - 在散景应用程序中插入 folium map html 代码