Swift中如何实现UILabel文本颜色动画效果

5

我该如何用Swift实现UILabel的颜色动画改变?我看到有些人提到使用CALayer,但我无法理解Swift语法。

这是Objective-C的一个示例。

CALayer *layer = myView.layer;
CATextLayer *textLayer = [CATextLayer layer];
[textLayer setString:@"My string"];
[textLayer setForegroundColor:initialColor;
[textLayer setFrame:self.bounds];
[[self.view layer] addSublayer:textLayer];

[UIView animateWithDuration:0.5 animations:^{
     textLayer.foregroundColor = finalColor;
   }];

我编辑了我的原始问题,以包括Objective-C的示例。 - user3250926
这个回答解决了你的问题吗?如何动画化UILabel的textColor属性? - aheze
2个回答

14

它比使用CALayer更容易。

let myLabel: UILabel!

UIView.animateWithDuration(2, animations: { () -> Void in
     myLabel.backgroundColor = UIColor.redColor();
})

就是这样...

编辑

好的,抱歉我不知道你想要改变什么颜色...我已将您的示例转换为Swift代码...

首先

import QuartzCore

if let layer: CALayer = self.view.layer as CALayer? {
    if let textLayer = CATextLayer() as CATextLayer? {
        textLayer.string = "My string"
        textLayer.foregroundColor = UIColor.whiteColor().CGColor
        textLayer.frame = self.view.bounds
        self.view.layer.addSublayer(textLayer)

        UIView.animateWithDuration(0.5, animations: { () -> Void in
            textLayer.foregroundColor = UIColor.redColor().CGColor
        })
    }
}

1
文本的颜色会改变,但不会动画显示,会立即改变。 - user3250926
1
背景色 ≠ 文字颜色,正如问题的作者所指出的那样,这实际上是不起作用的。 - Noah Witherspoon
谢谢,很抱歉我不能给你点赞,因为我没有15个声望。 - user3250926
只因为你缺乏知识就给一个踩,真是好样的啊。 - Dennis Weidmann
第一段代码片段没有改变文字颜色,这实际上是作者所要求的,而第二段代码对我不起作用。 - Raphael
显示剩余2条评论

2

很遗憾,textColor 不能通过 UIView.animate 进行动画处理。但是,UIView.transition 可以实现。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    
    UIView.transition(with: label, duration: 2, options: .transitionCrossDissolve) {
        self.label.textColor = .green
    }
}

结果:

Label's text color fades from black to green


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接