2012-05-03 9 views
2

CAKeyFrameAnimation中にパスに沿って移動中に2つのUIImageViewsの衝突を検出することは可能ですか?CAKeyFrameAnimation中の衝突の検出

これはどのように行われているのですか?アニメーション中に両方のCGRectをチェックすることを含む複数の方法を試しましたが、CAKeyFrameAnimation中にメソッドを実行してパスの衝突を検出するのに適したメソッドを見つけることができませんおよびUIImageView。

答えて

1

プレゼンテーションレイヤーからプロパティを取得する必要があります。これは、アニメーション中に存在する情報の最良の近似を有する。アクセスするには

view.layer.presentationLayer 

詳細については、CALayer/presentationLayerのドキュメントをご覧ください。

衝突をチェックする場合は、各オブジェクトのpresentationLayerを取得し、衝突をテストするプロパティにアクセスします。正確なチェック方法は、どのタイプのレイヤーと、簡単なヒットテストや深度チェックが必要かどうかによって異なります。いつ、どのようなタイプの衝突を探しているかはあなただけが知っています。

ただし、アニメーション化中にオブジェクトのプロパティにアクセスするには、presentationLayerが必要です。

EDIT

あなたはいつでもあなたは、これらのチェックを行うことができます。あなたは、別のアクションのコンテキストで、または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]; 

完了したらタイマーを無効にすることを忘れないでください。

+0

このコードを追加する場所はどこですか? –

+0

アニメーションが起こっている間にこのプロパティをチェックしたい、またはアニメーションが次に続くパスがUIImageViewに当たっていないかどうかを確認したい。 –

+0

私は既にあなたにどのように話したのですか?必要に応じていつでも重要なプロパティをチェックしますが、プレゼンテーションレイヤーでチェックする必要があります。これは、アニメーションが行われているときに値を追跡する唯一の場所だからです。 –