如何设置UILabel的textColor属性的动画?

don*_*ile 76 iphone core-animation

出于某种原因,当我尝试动画textColor时,它将无法工作.textColor突然从A变为B.是否可以为它设置动画,从红色到黑色?

str*_*nge 172

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

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

由于各种原因,这比使用NSTimers,CATextLayers等更好.CATextLayer没有对文本字距调整或NSAttributedText的适当支持,并且NSTimers是滞后的(加上代码太多).上面的过渡动画可以解决这个问题,也可以用在链动画中.我有同样的问题,已经尝试过上面的解决方案,但这个简单的代码反而创造了奇迹.

  • 大.在Swift中工作方式相同:`UIView.transitionWithView(creditsLabel,duration:0.3,options:.TransitionCrossDissolve,animations:{self.creditsLabel.textColor = UIColor.redColor()},completion:nil)` (16认同)
  • 漂亮,优雅,实际上是最好,最干净的解决方案. (7认同)
  • 只是一个注释:这只适用于标签是静态的.如果执行此操作并且正在修改标签的位置,则淡出动画将显示难看的工件. (7认同)

bud*_*ino 52

Swift 4解决方案:

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


ada*_*ton 13

textColor不可动画的原因是UILabel使用常规CALayer而不是CATextLayer.

为了使textColor可以生成动画(以及文本,字体等),我们可以继承UILabel,使其使用CATextLayer.

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

你可以找到一个完整的解释+这一个简易的开源替代品的UILabel 文章


ben*_*r44 9

您可以尝试创建UILabel的另一个实例或具有textColor的任何实例,然后在这两个实例之间应用动画(使用旧的textColor和具有新textColor的实例).


sho*_*eli 7

这是唯一对我有用的东西:

let changeColor = CATransition()
changeColor.duration = 1

CATransaction.begin()

CATransaction.setCompletionBlock {
    selected.label.layer.addAnimation(changeColor, forKey: nil)
    selected.label.textColor = .blackColor()
}

selected.nameLabel.textColor = .redColor()

CATransaction.commit()
Run Code Online (Sandbox Code Playgroud)


Jas*_*ien 6

textColour属性未在文档中指定为可动画,因此我认为您无法使用简单的UIView动画块执行此操作...

这可能是非常粗暴地完成,textColor每隔几毫秒就会发射一次,每次都会逐渐将颜色从一个设置为另一个.

我说这是粗糙的,因为它需要一个阵列或其他容器的预设颜色值从开始颜色到最终颜色,我敢肯定有一种方法可以使用核心动画或其他东西,我只是不要不知道它是什么.

  • 您应该使用`CADisplayLink`而不是`NSTimer`来手动驱动动画,因为它与显示更新同步.请参阅大约13:00的[WWDC 2014 Session 236:构建可中断和响应式交互](https://developer.apple.com/videos/play/wwdc2014-236/). (4认同)

ser*_*lex 6

这是我为标签文字颜色设置动画的代码.的重要组成部分,是文字颜色设置为clearColor动画前

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