現在、UILabel にテキストを表示するために割り当てられた各番号で乱数を生成するボタンの IBAction があります。ただ表示するだけでなく、テキストがフェードインしたり、その他の面白いアニメーションもかっこいいと思います。これを実現する簡単な方法を知っている人はいますか?
今、私はちょうど使用します
labelMain.text = @"my text";
現在、UILabel にテキストを表示するために割り当てられた各番号で乱数を生成するボタンの IBAction があります。ただ表示するだけでなく、テキストがフェードインしたり、その他の面白いアニメーションもかっこいいと思います。これを実現する簡単な方法を知っている人はいますか?
今、私はちょうど使用します
labelMain.text = @"my text";
これは少し古い (11 か月前) ことは承知していますが、投稿された他のアプローチに代わる方法について言及する価値があると思います。これはより良い解決策だと思います。
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 のドキュメントを参照してください。
次のコードは、ラベルにフェード効果を与えます。
- (IBAction)buttonClicked:(UIButton *)sender
{
labelMain.alpha = 0;
[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseIn
animations:^{ labelMain.alpha = 1;}
completion:nil];
}
これを試して:
[labelMain setAlpha:0];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[labelMain setAlpha:1];
[UIView commitAnimations];
デュレーションの変更は非常に簡単0.8
です。コードで値を調整するだけです。
// 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];
}];
これはクロスフェードアニメーションのように見えます
[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];