5

ここに画像の説明を入力してください

iPadのドラッグアンドドロップアクティビティに取り組んでいます。長方形のPNG画像があります(obj2という名前の画像を参照してください)。長方形の黒い部分だけにobj1をドラッグすると、反応するはずです。

if (CGRectIntersectsRect(obj1.frame, obj2.frame))
{
    NSLog(@" hit test done!! ");
}

現在、このコードは透明な領域でもヒットテストを受けています。それを防ぐ方法は?

4

1 に答える 1

2

特定の例(三角形と円)のような単純なものについては、DavidRönnqvistが提供するリンクが非常に役立ちます。あなたは間違いなくそれを見て、いくつかの利用可能なツールを見る必要があります。しかし、一般的なケースでは、最善の策は、クリッピング、描画、および検索です。

背景については、CGRRectをCGPathにクリップするを参照してください。

まず、アルファのみのビットマップイメージを作成します。これは上記のリンクで説明されています。

次に、を使用してコンテキストを画像の1つにクリップしますCGContextClipToMask()

次に、他の画像をコンテキストに描画します。

最後に、ビットマップデータで色付きのピクセルを検索します(コードの例については、上記のリンクを参照してください)。

ピクセルのいずれかが色付けされている場合は、いくつかのオーバーラップがあります。


別の同様のアプローチ(実際には高速かもしれません)は、各画像を独自のアルファのみのCGBitmapContextに描画することです。次に、各コンテキストでピクセルをウォークし、両方が同時に128を超えるかどうかを確認します。

于 2012-08-09T14:11:48.580 に答える