iphone - 繰り返し - uiviewkeyframeanimationoptions




CABasicAnimationを使用してCALayerを回転させた後、レイヤーは回転していない位置に戻ります (2)

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

rota.removedOnCompletion = NO;

プレゼンテーション層は、アニメーションが終了したときの位置に残す必要があります。 デフォルトはYESで、これはモデル値、つまりあなたが記述している振る舞いに戻ります。

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

rota.fillMode = kCAFillModeForwards;

私は落ちるコインを作りようとしています。 コインイメージは、2つのCABasicAnimationsを持つCALayerです.1つは転倒、1つは回転です。 落ちるアニメーションが終わると、そこにとどまります。 ランダムアニメーションになるはずの回転アニメーションは毎回違う角度で終了しますが、元の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"];

私はTwitter / Facebookの "Pull to Refresh"エフェクトのように、矢印を前後に回転しようとしていました。

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

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

前方アニメーション戦争はOKですが、後方アニメーションはまったく動いていませんでした。

そこでyeahdixonが提案した最後の行を追加し、さらにビューの変換をアニメーションの完了状態に設定しました:(180度回転)

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

「復元」アニメーション(後ろ向き)の場合、私は完了時にこれを行います:

myView.transform = CGAffineTransformMakeRotation(0);

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





cabasicanimation