2009-09-04 5 views
39

落ちているコインを作成しようとしています。コインイメージは、2つのCABasicAnimationsを持つCALayerです.1つは転倒、1つは回転です。落ちるアニメーションが終わると、そこにとどまります。ランダムアニメーションになるはずの回転アニメーションは毎回違う角度で終了しますが、元のCALAyerイメージにポップバックします。CABasicAnimationを使用してCALayerを回転させた後、レイヤーは回転しない位置に戻ります

アニメーションを終了した角度にとどまりたいです。出来ますか?どうすればいいのですか?

コード:

//Moving down animation: 
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"]; 
anim.duration = 1; 
anim.autoreverses = NO; 
anim.removedOnCompletion = YES; 

anim.fromValue = [NSNumber numberWithInt: -80 - row_height * (8 - _col)]; 
anim.toValue = [NSNumber numberWithInt: 0]; 

//Rotation Animation: 
CABasicAnimation *rota = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
rota.duration = 4; 
rota.autoreverses = NO; 
rota.removedOnCompletion = NO; 
rota.fromValue = [NSNumber numberWithFloat: 0]; 
rota.toValue = [NSNumber numberWithFloat: 2.5 * 3.15 ]; 
[cl addAnimation: rota forKey: @"rotation"]; 
[cl addAnimation: anim forKey: @"animateFalling"]; 

答えて

79

は、例えば、あなたがNOに回転アニメーションのremovedOnCompletionプロパティを設定している、

rota.removedOnCompletion = NO; 

アニメーションが終了したときにそれがあったプレゼンテーション層を残す必要があります。デフォルトはYESです。これはモデル値、つまりあなたが記述した動作に戻ります。

FILLMODEはまた、私は設定して、ことがわかっ

rota.fillMode = kCAFillModeForwards; 
+0

しました。私は質問に使用したコードを追加しました。 – Mikle

+9

fillModeのことがそれを解決しました。神はなぜそれが必要なのか知っています:) – Mikle

+0

@Allan 'fillMode'が' kCAFillModeForwards'に設定される必要がある理由は何ですか? – pixelfreak

1

、すなわち、設定する必要があります:removedOnCompletion = NO;

を楽器に見える漏れを生じなかったが、割り当て解除取得していないと、小さなを蓄積してメモリ量。 IDKの場合は、私の実装や何か、しかし、アニメーションの最後にremoveAllAnimationsを追加することによって、この小さな残量のメモリをクリアするように見えました。

[myview.layer removeAllAnimations]; 
+0

シミュレータまたはデバイス上にありますか? – Pablo

+0

ええ、良い点は、それはシミュレータ上にあった、と私は明らかに本当の取引であるデバイスを試していない。それは非常に小さな増加でした。ちなみに、私は楽器を使って別のリークのために狩りをしていたので、私は奇妙な記憶行動を見ていました。これが本当のリークを孤立させてしまいました。私は穴を塞ぐことができました。これはxcode 3.2.4です。この後、私は一貫してスタート・ナンバーに戻ります。 – yeahdixon

+1

プレゼンテーションレイヤをアニメートしています。次に、モデルレイヤーの 'transform'プロパティを最終値に設定する必要があります。代わりに、プレゼンテーションレイヤーを' removedOnCompletion = NO'で保存します。これにより、代わりに2つのレイヤーになります。だからあなたは記憶の増加を見るのです。 – Jano

4

私はTwitter/Facebookの "Pull to Refresh"エフェクトのように、矢印を前後に回転しようとしていました。前方アニメーション戦争はOK働くが、後方アニメーションが全く働いていなかった

rotation.removedOnCompletion = NO; 
rotation.fillMode = kCAFillModeForwards; 

を追加した後

問題は、私は同じUIViewの上を前後に回転をしていたが、そう。

だから私はyeahdixonによって提案された最後の行を追加し、加えて、ビューのアニメーションの完成した状態に変換を設定:「復元」アニメーション(後方)のために(180度回転)

[myview.layer removeAllAnimations]; 
myView.transform = CGAffineTransformMakeRotation(M_PI); 

I完了時にこれを行います:

myView.transform = CGAffineTransformMakeRotation(0); 

...うまくいきます。何とかそれはremoveAllAnimations呼び出しを必要としません。

+0

古い回答を元に戻しますが、 'removeAllAnimations'は+1してください。それが私のちらつきを止めさせた。 – Cyrille

関連する問題