UIView.animate不动画

时间:2019-03-24 07:08:09

标签: swift

我正在尝试使用UIView.animate为UILabel textColor更改设置动画。但是,当我尝试使用UIView时,没有任何改变。这是我的代码:

titleLabel.textColor = UIColor(red: 104/250, green: 155/250, blue: 121/250, alpha: 1)
UIView.animate(withDuration: 1.0, animations: {
    self.titleLabel.textColor = UIColor(red:206/255, green: 206/255, blue: 206/255, alpha: 1.0)

我希望标签的颜色变为绿色,然后再变回以前的灰色。预先感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

在Apple开发人员文档中没有将textColor属性指定为可动画设置,因此我认为您不能使用简单的UIView animations块来实现。

您可以改用UIView transition

代码:

UIView.transition(with: self.titleLabel, duration: 1.0, options: .transitionCrossDissolve, animations: {
            self.titleLabel.textColor = UIColor(red: 104/250, green: 155/250, blue: 121/250, alpha: 1)
        }, completion: { _ in
            self.titleLabel.textColor = UIColor(red:206/255, green: 206/255, blue: 206/255, alpha: 1.0)
        })

我希望它将对您有所帮助。让我知道您是否还有任何问题。

答案 1 :(得分:0)

尝试

 UIView.animate(withDuration: 1.0, animations: {
        self.titleLabel.textColor = UIColor(red:206/255, green: 206/255, blue: 206/255, alpha: 1.0)
        self.view.layoutIfNeeded()
    }

答案 2 :(得分:0)

TextColor在文档中不应设置动画,因此您必须执行以下动画代码。

原因

textColor无法设置动画的原因是UILabel使用常规的CALayer而不是CATextLayer。所以您有两个选择

  1. 在CATextLayer上执行动画
  2. 按照下面的代码添加自定义动画层。
let changeColor = CATransition() 

changeColor.duration = 1

CATransaction.begin()

CATransaction.setCompletionBlock {
self.titleLabel.layer.add(changeColor, forKey: nil)
self.titleLabel.textColor = UIColor(red:206/255, green: 206/255, blue: 206/255, alpha: 1.0) }

titleLabel.textColor = UIColor(red: 104.0/255.0, green: 155.0/255.0, blue: 121.0/255.0, alpha: 1.0)

CATransaction.commit()