0

我有一个标签,该标签使用根据服务器接收到的信息计算的值进行更新。根据流量的多少,更新可以快速或随机间隔出现。我想做的是将新计算的值与旧值进行比较,如果它增加了,则将文本更改为绿色,将背景更改为深绿色,如果值减小,则将文本更改为阴影红色和深红色。

这部分很容易做到,我遇到的麻烦是半秒左右后我想将背景和文本更改为它们的默认颜色。我这样做是作为值更改时用户反馈的一部分。

任何信息将不胜感激。

4

5 回答 5

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 秒才能重新设置动画以清除。

于 2012-04-04T18:29:23.510 回答
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];
}];

在第一个动画块中,您可以设置标签的文本颜色(如果需要,还可以设置背景颜色)。在其完成块中,您使用另一个动画设置标签的颜色。

希望能帮助到你。

于 2012-04-04T18:31:38.390 回答
0

看看NSTimer。计时器在很多情况下都很有用!

祝你好运!

于 2012-04-04T18:25:42.887 回答
0

或者,通过 IOS 4,followwing 块会产生相同的效果

    [UIView transitionWithView: infoLabelInternet duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
        infoLabelPremium.textColor = kPopoverActiveTextColor;
    } completion:nil];
于 2012-11-28T14:37:20.410 回答
0

你也可以这样做:

label.backgroundColor = [UIColor greenColor];
[label performSelector:@selector(setBackgroundColor:) withObject:[UIColor clearColor] afterDelay:0.5];
于 2016-09-07T13:31:21.510 回答