層が戻ってそれの非回転位置にジャンプCABasicAnimationを使用してCALayerのを回転させた後、
-
21-09-2019 - |
質問
私は落ちるコインを作成しようとしています。落下と回転1 - コイン画像は、その上に2 CABasicAnimationsと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"];
解決
あなたは例えばNO、への回転アニメーションのremovedOnCompletionプロパティを設定しました。
rota.removedOnCompletion = NO;
これはアニメーションが終了したときにそれがあったプレゼンテーション層を残す必要があります。デフォルトでは、モデルの値、あなたが記述すなわち、行動に戻ってスナップれる、YESです。
FILLMODEも、設定されるべきである、すなわち、
rota.fillMode = kCAFillModeForwards;
他のヒント
私は矢印の前後に、Twitterの/ Facebookなどの「プルリフレッシュするために」効果を回転させるようにしようとしていた。
問題がある、私はそう
を追加した後、同じUIViewの上で前後回転バックをやってましたrotation.removedOnCompletion = NO;
rotation.fillMode = kCAFillModeForwards;
前方アニメーション戦争作業OKが、後方のアニメーションはすべてで働いていませんでした。
だから私はyeahdixonによって提案された最後の行を追加し、加えて、ビューのアニメーションの完成した状態に変換を設定します(180度回転)
[myview.layer removeAllAnimations];
myView.transform = CGAffineTransformMakeRotation(M_PI);
「復元」アニメーション(後方)のために、私は完了時に次の操作を行います。
myView.transform = CGAffineTransformMakeRotation(0);
...そしてそれが正常に動作します。どういうわけか、それはremoveAllAnimationsを呼び出す必要はありません。
私は設定して、それを見つけた:removedOnCompletion = NO;
楽器で目に見える漏れを生じなかったが、割り当て解除されなかったと少量のメモリを蓄積しました。残留メモリのこの小さなビットをクリアするように見えたその私の実装やどのような場合は、しかし、アニメーションの終わりにremoveAllAnimationsを追加することにより、IDKます。
[myview.layer removeAllAnimations];