为啥 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 属性设置动画

iOS UILabel讲解以及根据字符串长度自动适应宽度和高度

什么是UILabel

更改 UILabel 的文本颜色