40

落ちるコインを作ろうとしています。コインの画像は、落下と回転の 2 つの CABasicAnimation を持つ CALayer です。落下アニメーションが終了すると、そこにとどまります。ただし、ランダムで毎回異なる角度になるはずの回転アニメーションは、元の 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"];
4

3 に答える 3

79

回転アニメーションの removedOnCompletion プロパティを NO に設定しましたか?

rota.removedOnCompletion = NO;

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

fillMode も設定する必要があります。

rota.fillMode = kCAFillModeForwards;
于 2009-09-04T07:21:53.840 に答える
4

Twitter/Facebook の「プルして更新」効果のように、矢印を前後に回転させようとしていました。

問題は、同じUIViewで前後に回転を行っていたので、追加した後

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

順方向のアニメーション ウォーは正常に機能していますが、逆方向のアニメーションはまったく機能していませんでした。

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

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

「復元」アニメーション (後方) の場合、完了時にこれを行います。

myView.transform = CGAffineTransformMakeRotation(0);

...そしてそれはうまくいきます。どういうわけか、removeAllAnimations 呼び出しは必要ありません。

于 2011-06-28T11:22:55.173 に答える
1

私は設定することによってそれを見つけました:removedOnCompletion = NO;

機器に目に見えるリークは発生しませんでしたが、割り当てが解除されず、少量のメモリが蓄積されていました。IDKは私の実装か何かですが、アニメーションの最後にremoveAllAnimationsを追加することで、このわずかな残りのメモリをクリアするように見えました。

[myview.layer removeAllAnimations];
于 2010-11-04T20:38:58.047 に答える