2012-04-04 64 views
0

简单改变颜色我有获取与从服务器接收到的信息计算出的值更新的标签。根据有多少流量,更新可以快速或随机进入。我想要做的是将新计算的值与旧值进行比较,如果增加,则将文本更改为绿色,将背景更改为更暗的绿色,如果值减少,则将文本更改为阴影红色和深红色。在一个UILabel

这部分是很容易做的,什么我有一些麻烦的是半后一秒钟左右,我想改变背景和文字是他们的默认颜色。作为用户反馈的一部分,我正在做这些工作,以便值的变化。

任何信息将不胜感激。

回答

3

标签是的UIView的子类。假设你有一些通知您,当发生变化的方法...

- (void)someMethodThatNotifiesOfChange { 
    // Calculate new values and assume the result means color button green 
    [UIView animateWithDuration:0.5 animations:^{ 
     label.backgroundColor = [UIColor greenColor]; 
    } completion:^(BOOL finished) { 
     if (finished) { 
      [UIView animateWithDuration:0.5 delay:5.0 options:nil animations:^{ 
        label.backgroundColor = [UIColor clearColor]; 
     } completion:nil]; 

    }]; 
} 

这只是改变的背景是绿色的,但说明了这一点没有-的少。这需要0.5秒来生成绿色动画。然后,当它完成时,它会等待5秒钟,然后用0.5来回动画清除。

+0

这美丽的工作对我来说到底。十分感谢你的帮助。 – Seb 2012-04-05 13:32:26

+0

@jmstone我试过你说的话,它对我很有用,只是它不会等待延迟。任何帮助,将不胜感激 – 2015-07-27 22:34:53

+0

发生了什么?它在0.5s变绿,然后在0.5s变清? – jmstone617 2015-07-28 15:27:18

0

看看NSTimer。定时器对于很多情况很有用!

祝你好运!

1

您可以使用CoreAnimation库,如果你想先进的动画,但如果你只是动画的UILabel属性,可以使用的UIView静态方法来做到这一点。你可以这样说:

[UIView animateWithDuration:0.3f animations:^{ 
    label.textColor = [UIColor greenColor]; 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:0.3f animations:^{ 
    label.textColor = [UIColor blackColor]; 
    } completion:nil]; 
}]; 

在第一动画块,您可以设置标签的文本颜色(和背景颜色,如果你想)。在完成块中,您使用另一个动画重新设置标签的颜色。

希望它有帮助。

+0

几乎是一个很好的答案。第二个动画需要延迟,否则只要标签变成绿色,它会在没有任何时间的情况下保持绿色而变黑。因此,下面的答案是针对这种特定情况的更好实施。尽管如此,还是一个很好的答案 – jmstone617 2012-04-04 18:34:37

+0

你是对的。感谢您的纠正。 – 2012-04-04 19:58:42

0

或者通过iOS 4的followwing块会做同样的效果

[UIView transitionWithView: infoLabelInternet duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
     infoLabelPremium.textColor = kPopoverActiveTextColor; 
    } completion:nil]; 
0

你也可以这样来做:

label.backgroundColor = [UIColor greenColor]; 
[label performSelector:@selector(setBackgroundColor:) withObject:[UIColor clearColor] afterDelay:0.5];