0

サーバーが受信した情報から計算された値で更新されるラベルがあります。トラフィックの量に応じて、更新は迅速に、またはランダムな間隔で行われる可能性があります。新しい計算値を古い値と比較し、値が増加した場合はテキストを緑色に、背景を濃い緑色に変更し、値が減少した場合はテキストを次の色に変更します。赤と濃い赤。

その部分は簡単ですが、私が問題を抱えているのは0.5秒後なので、背景とテキストをデフォルトの色に変更したいと思います。これは、値が変更されたときのユーザーフィードバックの一部として行っています。

どんな情報でも大歓迎です。

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

あるいは、IOS 4では、後続のブロックが同じ効果を発揮します

    [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 に答える
0

NSTimerを見てください。タイマーはさまざまな場面で役立ちます。

幸運を!

于 2012-04-04T18:25:42.887 に答える