为啥 UILabel TextColor 在 Playground 中有动画效果,但在设备上没有?
Posted
技术标签:
【中文标题】为啥 UILabel TextColor 在 Playground 中有动画效果,但在设备上没有?【英文标题】:Why is UILabel TextColor animated in a Playground, but not on a device?为什么 UILabel TextColor 在 Playground 中有动画效果,但在设备上没有? 【发布时间】:2016-11-01 03:37:41 【问题描述】:所以我想为一些 UILabel 的文本颜色更改动画。我取得了喜忧参半的成功。
我最终要做的一件事是在 Swift Playground 中使用 Xcode 8 进行尝试。运行动画的最简单形式是:
UIView.animate(withDuration: 5.0)
label.textColor = UIColor.red
label.transform = CGAffineTransform(scaleX: 2, y: 2)
但是,当我将相同的代码插入到一个空的 (Swift) ios 项目中时,文本颜色不再是动画的。
我知道 UILabel textColor 属性不应该是动画的,但在这里它是动画的。关于发生了什么的任何线索?也许与 PlaygroundSupport 模块有关?
这是在 Playground 中观看的动画:
这是在模拟器中绘制的动画:
编辑:添加动画以更好地阐明发生了什么
【问题讨论】:
将您的标签背景颜色设置为绿色并运行项目。您可以看到您的标签并确保您的标签有一些文本要显示,然后将您的代码复制并粘贴到 viewDidLoad 或按钮内行动并再次运行该项目......这应该工作...... 如果您仍然无法找到答案。您能否发布您的故事板层次结构...问题可能来自您的 IBOutlet @Joe 我没有任何麻烦看到 UILabel,甚至修改它。问题是它不会动画。尽管动画应该持续 5 秒,但它只会立即改变。如果我添加位置更改/应用转换,则在指定的时间段内动画效果很好。只有 textColor 动画部分引起了所有的悲伤。我不明白为什么它可以在 Playground 中工作,而不是在项目中。我也很担心/困惑为什么它也对你有用。 你在模拟器或真实设备上尝试......但是 5 秒很容易看到动画或对其应用一些动画启动延迟...... 检查我的更新...... 【参考方案1】:更新答案:
注意:只需将以下代码复制并粘贴到您的 viewController 中,然后连接您的 IBOutlets 并运行项目。
import UIKit
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
@IBOutlet weak var animateLabel: UILabel!
@IBAction func animateButton(_ sender: UIButton)
// textColor will change from blue to red...
animateLabel.textColor = .blue // set any colour
UIView.animate(withDuration: 5.0)
self.animateLabel.textColor = UIColor.red
self.animateLabel.transform = CGAffineTransform(scaleX: 2, y: 2)
输出:
您的代码看起来不错。将您的 textColor 设置为不同的颜色而不是白色。正如您所提到的。您在空项目上运行此代码,这意味着默认 viewController 背景也是白色的,这就是您看不到动画的原因。希望下面的代码有所帮助。
label.textColor = UIColor.red // set to any colour
注意:如果您想将 textColor 保持为白色..更改文本颜色背景或在标签上应用一些阴影以使其可见。
//apply backgroundcolor to your label
label.backgroundColor = UIColor.green // set to any colour
// apply shadow to your label
self.label.layer.shadowColor = UIColor.red.cgColor
self.label.layer.shadowOpacity = 1
self.label.layer.shadowOffset = CGSize.zero
self.label.layer.shadowRadius = 10
【讨论】:
感谢您的意见。不幸的是,问题不在于隐藏在背景中的文本,我想这在使用 UIColor.white 时有点模棱两可。我现在已经更新了(我有不同的背景颜色)。知道为什么代码在 Playground 环境中运行,而不是在 实际 iOS 环境中运行吗? 在发布答案之前,我已经测试了您的代码。您是将代码放在 viewDidLoad 内部还是外部?如果您在 viewDidLoad 中的代码应该可以工作。请告诉我... 不,它不起作用 :( 已将其作为视图生命周期的一部分,并附加到一个按钮上。尝试在情节提要中使用标签,并以编程方式创建标签。工作正常在 Playground 中很好,而不是在 iOS 项目中。我可以发布更多代码,但唯一的其他代码是样板代码。以上是关于为啥 UILabel TextColor 在 Playground 中有动画效果,但在设备上没有?的主要内容,如果未能解决你的问题,请参考以下文章
iOS UILabel.appearance().textColor 不可用
superview.superview 上的透明 UILabel textColor(有点)
使用 UIViewPropertyAnimator 为 UILabel textColor 属性设置动画