如何animationUILabel的textColor属性?

出于某种原因,当我尝试使textColoranimation时,它将无法工作。 textColor只是突然从A变成B.是否可以对它进行animation处理,让我们从红色变成黑色?

textColour属性没有被指定为在文档中是可animation的,所以我不认为你可以用一个简单的UIViewanimation块来做到这一点…

这可能可以用NSTimer每隔几毫秒发射一次,每次都从一个颜色逐渐设置到另一个。

我说这是粗糙的,因为它需要一个数组或其他容器的预设颜色值从开始颜色到结束颜色,我敢肯定有一种方法,你可以做到这一点,使用核心animation或什么的,我只是不不知道是什么。

相反,你是否尝试过使用像这样的对象本身的交叉渐变过渡,它会给你一个很好的从一种颜色到另一种颜色的淡入淡出效果:

 [UIView transitionWithView:myLabel duration:0.25 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ myLabel.textColor = NEW_COLOR; } completion:^(BOOL finished) { }]; 

这比使用NSTimers,CATextLayers等出于各种原因更好。 CATextLayer对文本字距或NSAttributedText没有适当的支持,而NSTimers是laggy(加上代码太多)。 上面的过渡animation可以做到这一点,也可以在连锁animation中使用。 我有同样的问题,并已经尝试了上面的解决scheme,但这个简单的代码工作奇迹,而不是。

textColor不具有animation效果的原因是UILabel使用常规的CALayer而不是CATextLayer。

为了使textColor具有animation性(以及文本,字体等),我们可以inheritanceUILabel,使其使用CATextLayer。

这是相当多的工作,但幸运的是我已经做到了:-)

你可以在本文中find一个完整的解释+ UILabel的一个开源替代品

你可以尝试创buildUILabel的另一个实例,或者任何具有textColor的实例,然后在这两个实例之间应用animation(使用旧的textColor和使用新的textColor的animation)。

Swift 3解决scheme:

 UIView.transition(with: yourLabel, duration: 0.3, options: .transitionCrossDissolve, animations: { self.yourLabel.textColor = .red }, completion: nil) 

这是我的代码来animation标签的文字颜色。 重要的部分是在animation之前将textColor设置为clearColor

 label.textColor = [UIColor clearColor]; [UIView transitionWithView:label duration:duration/4 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ label.textColor = self.highlightedCellPrimaryTextColor; } completion:^(BOOL finished) { }]; 

我发现将UIView放置在标签下方并将其不透明的animation制作起来非常容易。 标签必须添加到该视图。 从资源消耗的angular度来看,也许不是一个好的解决scheme,但是非常简单。

更新了swift 3.0

我只是从@budidino的评论改变

 UIView.transition(with: my.label, duration: 0.3, options: .transitionCrossDissolve, animations: { my.label.textColor = .black }, completion: nil)