2011-12-09 24 views
0

我是Iphone Development的新手,如何获得特定的触摸区域?

鉴于以下情况map。每当我选择像“西澳大利亚”这样的特定部分时,我都想提出触摸事件。但是那个特定的区域不是方形或圆形来提及触摸区域。边界不正确。我如何获得触摸事件?

请任何人指导我或给我一个教程如何与该部分工作?

回答

3

在您的链接地图中,您可以看到每个区域由多边形定义,由顶点数组表示。 (如果你没有看到这个,那么看看HTML源代码,然后你会看到它。)你可以在互联网上找到很多关于算法的讨论,这些算法可以确定一个点是否在用这种方式描述的多边形内。 Here is one discussion that may be worth looking at,并且在你被它的长度阻止之前(这是非常彻底的),请参阅标题为The "Crossing Count" Algorithm的部分。与我见过的其他人相比,这是一个非常简单的方法。这涉及到确定线相交并计算多边形的多少边与射线相交。

你需要检查每个多边形的触摸点,直到找到它在里面。有一件可能值得的事情是首先检查触点是否在边界框内,由每个多边形顶点数组的min x,max x,min y和max y值定义。如果它不在边界框内,那么它不在多边形内。

就检测到触摸事件和它在哪里,look at my answer to this question,它告诉如何确定触摸发生在屏幕上的哪个位置(使用touch:locationInView :)。

我不知道你是否打算放大和缩小图像,但是这会增加一些复杂的事情。如果这个回应没有什么帮助,你能提供更多关于你想要做什么的信息吗?

+0

+1用于很好地解释交叉计数算法。 – Till

0

有几个选项,但只有一个将是相当微不足道的实施。

首先,你不能用像UIButtons这样的常规控件来完成这个任务 - 相反,你会想自己处理触摸事件。

-1-彩色地区;你的地图是彩色的,所有可点击的区域都显示不同的颜色。

在这种情况下,您只需检查触摸点下方的像素是否为其颜色。类似的事情在example内完成。

-2-自定义触摸地图;几何物体的地图,理想的三角形。

您可能会创建某种由三角形组成的叠加贴图。大小可能有所不同。该地图上的所有三角形都链接到一个地区。无论用户何时触摸您的地图,您都会运行碰撞检测。有关简单2D点到多边形碰撞的详细信息,请查看this article at topcoder

0

@Jim在一般的便携式算法上给出了很好的建议。由于您使用的是iPhone,因此将地图信息转换为UIBezierPath对象可能会很方便。有关如何创建这种路径对象的详细信息,请参阅Drawing and Printing Guide。然后你可以使用[UIBezierPath containsPoint:]为你做点击测试。如果您希望获得与网页相同的效果,则使用路径对象也可以方便地进行突出显示。