2011-02-22 12 views
0

UILabelのアルファベットをアニメートして、ボタンを押したときに白く点滅します。ラベルは純粋な白です。[r255、g255、b255、a1]フラッシュを達成するには、CALayerの不透明度を0.5から1.0にアニメーション化してから0.5に戻します。これを行うコード:(Dave DeLongのおかげで)CALayerを使用してUILabelの不透明度をアニメーション化しますか?

UILabel *navTitle; 
@property(nonatomic, retain) UILabel *navTitle; 
... 
... 
@synthesize navTitle; 

です。

// ADD ANIMATION OBJECT 
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
[anim setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
[anim setFromValue:[NSNumber numberWithFloat:0.5]]; 
[anim setToValue:[NSNumber numberWithFloat:1.0]]; 
[anim setAutoreverses:YES]; 
[anim setDuration:0.5]; 
[[[self navTitle] layer] addAnimation:anim forKey:@"flash"]; 
[[self navTitle] setTag:1138]; 

私は次のフラッシュ、私の質問の前にremoveAnimationForKeyを呼び出していますフラッシュが複数回(つまり、ボタンが押されるたびに)呼び出されるように、これは正しいです(私は層からアニメーションを削除するビットすなわち)。私がレイヤーを削除しなかった場合、私はますます追加するように彼らはちょうど構築すると仮定して私は正しいですか?

// REMOVE ANIMATION OBJECT 
if([[self navTitle] tag] == 1138) { 
    [[[self navTitle] layer] removeAnimationForKey:@"flash"]; 
    [[self navTitle] setTag:0]; 
} 

NB:最初のアイデアは、(NSTimerで)一定のパルス化を行うことだったが、単一のパルスをテストするにはUIに多くのクリーナーを見ました。

EDIT:

あなたは私が削除を行う前に、現在私はUILabelタグをチェックしています、何が起こるか存在しないキーのremoveAnimationForKeyを呼び出そうと、私はこれを行うために必要なのですか?

+0

アニメーションブロックを使用していない理由は何ですか? autoReverse、1回繰り返し、UIViewのアルファベットをアニメ化する –

+0

アニメーションを0.5から1.0にアニメーション化して0.5に戻す方法が見つからないため、animateWithDurationを使用していませんでした。あなたはautoreverseがうまくいくと思いますが、残念ながらUIViewAnimationOptionRepeatと一緒にしか動作しません。 CABasicAnimationによる自動逆戻りは、初期値をとり、別のものにアニメートして元に戻します。繰り返しはしません。 – fuzzygoat

答えて

1

私はとにかくだと思う、それはフレームワークが独自の方法でそれをしないということかもしれませんが、手動でそれをやってする限りaddAnimation方法はremoveAnimationとペア方式であるとして、それを損なわない、間違っていません...

関連する問題