5

在此处输入图像描述

我正在为 iPad 进行拖放活动。我有一个矩形 PNG 图像(参见名为 obj2 的图像)。当我只在矩形的黑色部分拖动 obj1 时,它应该会做出反应。

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

现在,这段代码甚至在透明区域也进行了命中测试。如何防止这种情况发生?

4

1 回答 1

2

对于像您的具体示例(三角形和圆形)这样简单的东西,David Rönnqvist 提供的链接非常有用。您绝对应该查看它以查看一些可用的工具。但对于一般情况,最好的选择是剪辑、绘图和搜索。

有关一些背景知识,请参阅将 CGRRect 剪辑到 CGPath

首先,创建一个仅 alpha 的位图图像。这在上面的链接中进行了解释。

接下来,使用CGContextClipToMask().

现在,将您的其他图像绘制到上下文中。

最后,在位图数据中搜索任何彩色像素(参见上面的示例代码链接)。

如果任何像素着色,则存在一些重叠。


另一种类似的方法(实际上可能更快)是将每个图像绘制到它自己的 alpha-only CGBitmapContext 中。然后遍历每个上下文中的像素,看看它们是否同时都>128。

于 2012-08-09T14:11:48.580 回答