2012-09-16 18 views
16

「派手な」エフェクトの種類を与えるCALayerアニメーションを作成したいと思います。そのために、私は '不透明度'プロパティをアニメートしようとしていますが、私の問題はどこから始めるべきか、どうすればいいのかわかりません。ここCALayer不透明アニメーション

アニメーションのグラフィカルな説明である:不透明度が0で開始

opacity 
    | ___ 
1 | | | 
    | | | * repeatCount 
0 |___| |_ . . . 
    -------------------------> time 
    |______| 
    duration 

、次いで再び0に、1アニメーション(この0から1対0アニメーションは数を取り持続時間に等しい秒数)。このプロセスは 'repeatCount'回繰り返されます。ここで

は、コードのいくつかの背景です:

float duration = ...; // 0.2 secs, 1 sec, 3 secs, etc 
int repeactCount = ...; // 1, 2, 5, 6, ect 

CALayer* layer = ...; // I have a CALayer from another part of the code 
layer.opacity = 0; 

// Animation here 

done = YES; // IN THE END of the animation set this ivar to yes 

これを実現する最良の方法は何ですか?私はこれまでCALayersを使ったことがないので、アニメーションシステムの仕組みを学ぶよい機会です。ちなみに、私はドキュメントを検索しましたが、1つまたは2つの簡単なアニメーションをどのように追加するのかを理解していますが、この特定の方法を行う方法はわかりません。

+0

upvoteグラフXD –

答えて

40

これを実現する最善の方法は、というインスタンスを作成してレイヤーに追加することで、明示的なアニメーション(guideを参照)を使用することです。アニメーションが完了したときにデリゲートを設定し、animationDidStop:finished:メソッドを実装することができます知りたい場合は、しかし、それはその通り完了ブロックを使用するのが最善です

CABasicAnimation *flash = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
flash.fromValue = [NSNumber numberWithFloat:0.0]; 
flash.toValue = [NSNumber numberWithFloat:1.0]; 
flash.duration = 1.0;  // 1 second 
flash.autoreverses = YES; // Back 
flash.repeatCount = 3;  // Or whatever 

[layer addAnimation:flash forKey:@"flashAnimation"]; 

コードは次のようになりますすべてのコードを同じ場所に置くことができます。 iOS 4またはOS X用に作成している場合は、これを達成するために優秀なCAAnimationBlocksカテゴリを使用することができます。

+0

ありがとう!それは完全に機能します。ちょうど1つ:それは 'animationWithKeyPath:' – Alex

+0

@Alexです。答えを更新します(これはメモリからのものであり、常に最も信頼性の高い情報源ではありません)。 – trojanfoe

+0

わかりません。フェードインしてすぐに消えます。 –

0

トロイの木馬の回答が優れています。私はちょうどあなたが "タイムライン"(フェードアウトするのにどれくらいの時間を要するか、それからどれくらい待つべきか、どれくらい長くフェードインする必要があるかなど) CABasicAnimationを複数組み合わせてCAAnimationGroupにまとめる予定です。あなたはこのトピックに関する私の本の章、CAAnimationとその子孫のチュートリアルを構成するの最後の部分読みたいかもしれません

:私の議論は、iOS版に向けられている

http://www.apeth.com/iOSBook/ch17.html#_core_animation

注意を。 Mac OS Xでは、それがあなたのものであれば、ビュー/レイヤーのアーキテクチャは少し異なりますが、CAAnimationについてはそれでも正しいと言えます。

関連する問題