【发布时间】:2021-11-16 05:42:39
【问题描述】:
我正在使用理想的解决方案来为我的 UILabel 的文本更改设置动画。类似于这个答案https://stackoverflow.com/a/33705634/8704900
问题是当文本长度不同时,动画不再流畅并且文本在动画之前闪烁。
视频:https://drive.google.com/file/d/1I89NnzjQp7TbemO-dmcbKzYUr7pM7mGk/view?usp=sharing
我的代码如下所示:
@IBOutlet weak var label: UILabel!
var titleLabelAnimation: CATransition = {
let animation = CATransition()
animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.default)
animation.type = .push
animation.subtype = .fromTop
animation.duration = 0.5
return animation
}()
@IBAction func didTap() {
self.label.layer.add(self.titleLabelAnimation, forKey: nil)
self.label.text = "Can you see a flicker?"
self.label.sizeToFit()
}
@IBAction func didTapRev() {
self.label.layer.add(self.titleLabelAnimation, forKey: nil)
self.label.text = "Hello this is animation !!!"
self.label.sizeToFit()
}
我尝试了 layoutIfNeeded()、sizeToFit()、在动画之前更改文本以及其他几种解决方法。似乎没有任何效果!
【问题讨论】:
-
我已经尝试过您的代码,如果我在前一个成功完成之前触发了新动画,则只能看到闪烁。这是您使用的系统所期望的。您忘记分享的代码是否还有其他内容? (我创建了一个新项目,添加了一个限制在屏幕中间的标签,在标签下方添加了 2 个按钮并复制并连接了您在此处发布的代码)。
-
谢谢。就是这段代码:/我一定要留出时间让上一个动画完成。但是,当文本长度发生变化时,该问题是可重现的。问题也是间歇性的。但大多数时候很明显,如果你看到我附上的视频!您使用的是哪个版本的 Xcode 和 iOS 版本?
标签: ios swift animation uilabel catransition