CAKeyFrameAnimation 中にパスに沿って移動しているときに、2 つの UIImageView の衝突を検出することは可能ですか?
これがどのように行われるか、アニメーション中に両方の CGRects の衝突をチェックするなど、複数の方法を試しましたが、CAKeyFrameAnimation 中にメソッドを実行し、パスと UIImageView の衝突を検出しようとする適切な方法が見つかりません。
CAKeyFrameAnimation 中にパスに沿って移動しているときに、2 つの UIImageView の衝突を検出することは可能ですか?
これがどのように行われるか、アニメーション中に両方の CGRects の衝突をチェックするなど、複数の方法を試しましたが、CAKeyFrameAnimation 中にメソッドを実行し、パスと UIImageView の衝突を検出しようとする適切な方法が見つかりません。
プレゼンテーション層からプロパティを取得する必要があります。アニメーション中に存在する情報の最良の近似値が得られます。アクセスする
view.layer.presentationLayer
詳細については、CALayer/presentationLayer のドキュメントを参照してください。
衝突をチェックしたいときは、各オブジェクトのpresentationLayerを取得してから、衝突をテストしたいプロパティにアクセスします。チェックする正確な方法は、レイヤーのタイプと、単純なヒットテストまたは深度チェックが必要かどうかによって異なります。いつ、どのタイプの衝突を探したいかを知っているのはあなただけです。
ただし、アニメーション中にオブジェクトのプロパティにアクセスするには、presentationLayer が必要です。
編集
これらのチェックはいつでも行うことができます。別のアクションのコンテキストで実行するか、NSTimer を使用して一定の間隔で実行できます。アニメーション タイマー自体に接続する CADisplayLink を使用することもできます。
CADisplayLink を使用する場合は、frameInterval を可能な限り高い値に設定し、パフォーマンスに影響を与えないように、必要なことを行うことをお勧めします。
timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(checkForCollisions)];
// Callback is for every frame, which is 60 times per second.
// Only callback every 6 frames (which is ten times per second)
timer.frameInterval = 6;
[timer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
完了したら、タイマーを無効にすることを忘れないでください。