2013-06-28 8 views
10

今私はUILabelのテキストを表示するために割り当てられた各番号で乱数を生成するボタンのIBActionを持っています。ちょうど表示されるのではなく、テキストがフェードインされるか、他の興味深いアニメーションもすばらしくなります。これを実現させる簡単な方法を誰かが知っていますか?UILabelにテキストをフェードインするにはどうすればよいですか?

今私は、次のコードは、お使いのラベルに影響をフェージングあなたを与えるだろう

labelMain.text = @"my text"; 

答えて

27

を使用しています。

- (IBAction)buttonClicked:(UIButton *)sender 
    { 
    labelMain.alpha = 0; 

    [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseIn 
    animations:^{ labelMain.alpha = 1;} 
    completion:nil]; 
} 
+0

ありがとうございました!これは最初のもので、魅力のように機能しました!非常にシンプルで簡単に時間を調整し、遅延を追加する! – Herbie999

+0

喜んで助けてください:) @ Herbie999 –

1

これを試してみてください:

[labelMain setAlpha:0]; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.8]; 
[labelMain setAlpha:1]; 
[UIView commitAnimations]; 

期間を変更することは非常に簡単です - ちょうどコードの値0.8を調整します。

+2

ブロックはより強力です。 animateWithDurationのbeginAnimationsを削除することを検討する必要があります。 – rdurand

6
label.text = @"old text"; 
    [UIView animateWithDuration:0.4 animations:^{ 
     label.alpha = 0.0f; 
    } completion:^(BOOL finished) { 
     label.text = @"next text"; 
     [UIView animateWithDuration:0.4 animations:^{ 
      label.alpha = 1.0f; 
     } completion:^(BOOL finished) { 
      NSLog(@"finished transition"); 
     }]; 
    }]; 
0
// fade out the current value 
[UIView animateWithDuration:0.2 
         delay:0 
        options:0 
       animations:^{ 
        labelMain.alpha = 0.0f; 
       } 
       completion:^(BOOL finished) { 
        // set the new value and fade in 
        labelMain.text = newValue; 
        [UIView animateWithDuration:0.2 
             delay:0 
             options:0 
            animations:^{ 
             labelMain.alpha = 1.0f; 
            } 
            completion:nil]; 

       }]; 
0

これは、私はこれが(11ヶ月)ビット古いですけど、私はそれが掲示他のアプローチに代わるものを言及する価値だと思うクロスフェードアニメーション

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut 
     animations:^{ 
    labelMain.alpha = 0; 

     [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseIn 
     animations:^{ labelMain.alpha = 1;} 
     completion:nil]; 

    } completion:nil]; 
26

のようになります。私はより良い解決策であると感じています。このようなUIView transitionWithView:duration:options:animations:completionクラスレベルのメソッドの

メイクの使用、:

NSTimeInterval duration = 0.5f; 
[UIView transitionWithView:labelMain 
        duration:duration 
        options:UIViewAnimationOptionTransitionCrossDissolve 
       animations:^{ 
        labelMain.text = @"new value"; 
       } completion:nil]; 

これは、クロスフェードをしますlabelMain.textに「新しい価値」の前の値から。

このアプローチは、たとえばUIImageViewの画像を変更するなどの他のビュー値でも機能します。

トピックについては、Apple's docsを参照してください。

+1

同じスーパービューで多くのラベルをアニメーション化したい場合は、 'transitionWithView'引数でスーパービューを使用してください。 –

+2

これが最良の方法です。なぜこれが受け入れられた答えではないか分からない。 –

関連する問題