2012-04-04 9 views
0

私は、サーバーが受け取った情報から計算された値で更新されるラベルを持っています。どのくらいのトラフィックがあるかに応じて、更新は迅速に、またはランダムな間隔で行われます。私がしたいのは、新しい計算値と古い値を比較し、増加している場合はテキストを緑に、背景を暗い緑に、値が減少している場合はテキストを陰影に変更します赤と濃い赤。UILabelで簡単に色を変更します

その部分は簡単ですが、私が何か問題を抱えているのは、0.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でアニメーションを戻してクリアします。

+0

これは最後に私のために美しく働きました。助けてくれてありがとう。 – Seb

+0

@jmstone私はあなたが言ったことを試して、それが遅れを待つことを除いて私のために働く。どんな助けがありがたいですか –

+0

何が起こっていますか? 0.5秒で緑色に変わり、0.5秒で消えますか? – jmstone617

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

ほとんど素晴らしい答えです。 2番目のアニメーションには遅延が必要です。そうでない場合は、ラベルが緑色に変わるとすぐに、緑色で残りません。したがって、私の答えは、この特定のシナリオのためのより良い実装です。それでも良い答えです! – jmstone617

+0

あなたは絶対に正しいです。修正していただきありがとうございます。 –

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]; 
関連する問題