iPadのドラッグアンドドロップアクティビティに取り組んでいます。長方形のPNG画像があります(obj2という名前の画像を参照してください)。長方形の黒い部分だけにobj1をドラッグすると、反応するはずです。
if (CGRectIntersectsRect(obj1.frame, obj2.frame))
{
NSLog(@" hit test done!! ");
}
現在、このコードは透明な領域でもヒットテストを受けています。それを防ぐ方法は?
iPadのドラッグアンドドロップアクティビティに取り組んでいます。長方形のPNG画像があります(obj2という名前の画像を参照してください)。長方形の黒い部分だけにobj1をドラッグすると、反応するはずです。
if (CGRectIntersectsRect(obj1.frame, obj2.frame))
{
NSLog(@" hit test done!! ");
}
現在、このコードは透明な領域でもヒットテストを受けています。それを防ぐ方法は?
特定の例(三角形と円)のような単純なものについては、DavidRönnqvistが提供するリンクが非常に役立ちます。あなたは間違いなくそれを見て、いくつかの利用可能なツールを見る必要があります。しかし、一般的なケースでは、最善の策は、クリッピング、描画、および検索です。
背景については、CGRRectをCGPathにクリップするを参照してください。
まず、アルファのみのビットマップイメージを作成します。これは上記のリンクで説明されています。
次に、を使用してコンテキストを画像の1つにクリップしますCGContextClipToMask()
。
次に、他の画像をコンテキストに描画します。
最後に、ビットマップデータで色付きのピクセルを検索します(コードの例については、上記のリンクを参照してください)。
ピクセルのいずれかが色付けされている場合は、いくつかのオーバーラップがあります。
別の同様のアプローチ(実際には高速かもしれません)は、各画像を独自のアルファのみのCGBitmapContextに描画することです。次に、各コンテキストでピクセルをウォークし、両方が同時に128を超えるかどうかを確認します。