我正在开发iPad的拖放活动。我有一个长方形的PNG图像(见名为obj2的图像)。当我只在矩形的黑色部分拖动obj1时,它应该有反应。
if (CGRectIntersectsRect(obj1.frame, obj2.frame))
{
NSLog(@" hit test done!! ");
}
现在,这段代码即使在透明的区域上也会进行点击测试。如何防止这种情况发生?
对于像您的具体例子(三角形和圆形)这样简单的东西,David Rönnqvist给出的链接非常有用。你一定要看看它,看看一些可用的工具。但对于一般的情况,最好的办法是剪裁、绘制和搜索。
关于一些背景知识,请看 将一个CGRRect夹到一个CGPath上。.
首先,创建一个只有alpha的位图图像。这在上面的链接中解释。
接下来,使用以下方法将你的上下文剪辑到你的一张图片上。CGContextClipToMask()
.
现在,将你的另一张图片画到上下文上。
最后,搜索位图数据中的任何彩色像素(参见上面的链接中的示例代码)。
如果任何一个像素着色,那么就会有一些重叠。
另一种类似的方法(实际上可能更快),是将每个图像绘制到它自己的只有alpha的CGBitmapContext中。然后在每个上下文中走动像素,看看它们是否曾经同时是>128。