アニメーションを停止するには、パラメータ: UIViewAnimationOptionBeginFromCurrentState を使用して新しい UIView アニメーションを呼び出し、前のアニメーションをオーバーライドします。
そのため、値 X から値 Y へのアニメーションを開始する方法が 1 つあります。最初のアニメーションを中断する別の方法があります。この 2 番目のメソッドは、[一時停止] ボタンがタップされるたびに呼び出されました。
アニメーションを再開したいときは、オブジェクトが残っていた状態からの新しい X 値と Y 値を使用して、アニメーションの開始メソッドを再度呼び出すだけです。
UIImageView オブジェクトをブロック形式でアニメーション化するコード:
[UIView animateWithDuration: 5
delay: 0.0
options: UIViewAnimationOptionCurveLinear
animations: ^{
self.center = destinationPosition;
}
completion:nil];
停止/中断コードは次のとおりです。
UIImageView *currentPosition = [[UIImageView alloc] initWithFrame:[[self.layer presentationLayer] frame]];
destinationPosition.x = currentPosition.center.x;
destinationPosition.y = currentPosition.center.y;
[UIView animateWithDuration: 0.1
delay: 0.0
options: UIViewAnimationOptionCurveLinear | UIViewAnimationOptionBeginFromCurrentState
animations: ^{
self.center = destinationPosition;
} completion:nil];
このコードでは、レイヤ プレゼンテーション メソッドを使用して、アニメーション中にオブジェクトが最後に持っていた値を把握し、ユーザーがゲームプレイを再開したときにその時点からアニメーションを開始できるようにしました。これは、オブジェクトが予測された目的地の値を格納しているように見えたため、「現時点で」の値で更新する必要があったためです。
停止アニメーション コードの持続時間は 0.1 のみであることに注意してください。つまり、新しいアニメーションが見つかった状態 (UIViewAnimationOptionBeginFromCurrentState) から初期アニメーションを上書きするようなものです。値が非常に短いため、アニメーションがあった場所でたまたま「停止」します。
これが最善の方法かどうかはわかりませんが、私にとってはうまくいきました。