UIButtonのtextColorプロパティをアニメーション化する方法はありますか?UILabelテキストカラーアニメーションの解決策をいくつか見つけましたが、UIButtonの解決策は見ていません。
6 に答える
ビューでトランジションを使用
[UIView transitionWithView:backButton
duration:0.5f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
[backButton setTitleColor:[_peacock lighten:d.primary] forState:UIControlStateNormal];
}
completion:^(BOOL finished){
}];
NSTimerは、アニメーションツールとしては絶対に良くありません。また、精度が必要な一般的な時間管理(フレームレート)にも使用しないでください。このブログ投稿は、アニメーション化できないUILabelプロパティをどうするかについての私の立場を完全に例示しています。UILabelプロパティは、NSTimerではなくCAを介してレンダーサーバーに送信する必要があります。UILabelの代わりに、CATextLayerを使用またはラップforegroundColor
して、標準のアニメーションブロックでそのプロパティをアニメーション化できます。
これはここで非常によく答えられます。それは基本的にこの便利な人を使用しています:
[UIView transitionWithView:duration:options:animations:^()completion:^()];
明らかに、あなたは使用する必要があります
[UIButton setTitleColor:[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0] forState:UIControlStateNormal];
実際にアニメーション化して時間の経過とともに色を変更するには、NSTimerのインスタンスを作成し、@selectorパラメーターを使用して実行する特定のメソッドを指定する必要があります。タイマーが実行されるたびに、メソッドがトリガーされ、UIButtonの色が変更されます。
[NSTimer scheduledTimerWithTimeInterval:2.0f
target:self
selector:@selector(updateCounter:)
userInfo:nil
repeats:YES];
また、チェックしてください: http ://servin.com/iphone/iPhone-Timers-and-Animated-Views.html
同じ位置に配置された異なる色の2つのボタン(またはラベルなど)を使用できます。
button1 = UIButton(frame: frame)
button2 = UIButton(frame: frame) // same frame
button1.setTitleColor(UIColor.redColor(), forState: .Normal) // red
button2.setTitleColor(UIColor.blueColor(), forState: .Normal) // blue
その後、button2のトランジションアニメーションによって色のアニメーションに到達できます。
UIView.animateKeyframesWithDuration(
1.0, delay: 0, options: [.Autoreverse, .Repeat],
animations: {
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: {
self.button2.alpha = 1.0
})
UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: {
self.button2.alpha = 0.0
})
}, completion: nil)
これは実際にはアニメーションではありませんが、機能します。
色をアニメートしたい頻度でタイマーを作成します。
タイマーがchangeColorOnButton
起動するたびに、そのタイマーにメソッドを呼び出させます。
[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(changeColorOnButton:) userInfo:nil repeats:YES];
色の配列を作成しますcolorsArray
(事前に色を配置するか、配列に束を追加してシャッフルしてランダム化します。int、を作成しますintForColorInArray
。
changeColorOnButtonメソッドで、次のようにします。
- (void) changeColorOnButton:(UIButton *) button {
UIColor *nextColor = [colorsArray objectAtIndex:intForColorArray];
[button.titleLabel.setTextColor:nextColor];
intForColorArray = (intForColorArray +1) % [colorsArray count];
}