特定のプロパティが変更されたときにモデルで起動する通知があります。その結果、特定のビューオブジェクトのセレクターが通知をキャッチして、それに応じてビューの位置を変更します。
通知により、ウィンドウのビューが特定の方向に移動します(常に垂直または水平に、常にウィンドウの標準のステップサイズで)。ユーザーアクションにより、複数の通知が次々に発生する可能性があります。たとえば、3つの通知を送信してビューを3ステップ下に移動し、さらに2つの通知を送信してビューを右に2ステップ移動することができます。
問題は、アニメーションを実行するときに、アニメーションが連続して発生しないことです。したがって、前の例では、ビューをゆっくりと3スペース下に移動してから、通知の結果として2スペース上に移動したいのですが、代わりに、ビューは新しい位置に斜めに移動することになります。
これが私の2つのセレクターのコードです(placePlayerはモデル内の現在の情報に従ってビューの位置を設定することに注意してください):
- (void)moveEventHandler: (NSNotification *) notification
{
[self placePlayer];
CABasicAnimation* moveAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
moveAnimation.duration = 3;
moveAnimation.fillMode = kCAFillModeForwards; // probably not necessary
moveAnimation.removedOnCompletion = NO; // probably not necessary
[[self layer] addAnimation:moveAnimation forKey:@"animatePosition"];
}
このメソッドを複数回呼び出す方法についての提案は、アニメーションを一度に実行するのではなく、段階的に実行するように強制しますか?ありがとう!!