2012-04-04 23 views
0

単純なCABasicアニメーションを使用して、ビュー内の画像を回転しています。ユーザが画像に触れると、回転が始まるようにタッチが開始されます。ユーザーが画像の回転を終了すると、Touches Endedが呼び出されます。CABasicアニメーション回転

一度タッチしたら、画像を再び固定小数点に回転させています。コードは次のとおりです

CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 

double startRotationValue = 0; 
rotation.fromValue = [NSNumber numberWithDouble:startRotationValue]; 
rotation.toValue = [NSNumber numberWithDouble:startRotationValue+0.25]; 
rotation.duration = 1.0; 
rotation.fillMode = kCAFillModeForwards; 
rotation.removedOnCompletion = NO; 

[self.view.layer addAnimation:rotation forKey:@"rotating"]; 

イメージは2度目に選択されるまでうまくいきます。タッチが始まりましたが、画像を回転させることはできません。実際には画像は、私は私が触れるにremovedOnCompletionを呼び出そうとしています

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

とは何かを知っているすべてで移動することができない問題が解決しない始めました。

rotation.removedOnCompletion = YES 

ここで最善の方法は、何らかの理由でビューがrotation.removedOnCompletionを正しく登録していないことです。

答えて

1

まず、fillModeremovedOnCompletionをつぶすべきではありません。これらを完全に削除します。あなたにそれらを混乱させるように言う人は、ほとんど常に間違った問題を修正しています。

解決しなければならない問題は、アニメーションが完了して削除されるとき、オブジェクトが元の場所に「スナップバック」することです。その理由は、実際にはモデルの価値を決して決めることができないからです。これは、後ですべての種類の少し面倒な問題を作成します。この行の後

[self.view.layer addAnimation:rotation forKey:@"rotating"]; 

追加:

self.view.layer.transform.rotation = startRotationValue + 0.25; 

(あなたは、transformを保持し、それを修正し、再びそれを設定するためにここに一時変数を使用する必要があり、私は一般的に。 rotationアトリビュートを使用しないでください)

これは、アニメーションの最終状態と一致するように、下にあるモデルレイヤーを設定します。

+0

興味深いことに、ここでの多くの記事は、アニメーションが開始位置にスナップするのを避けるために、fillmodeとremoveOnCompletionの使用を参照しています。私は同じシナリオを避けるために、トランスフォームを実験します、ありがとう。 – user494088

関連する問題