如何获得特别的触摸区域?

时间:2011-12-09 19:53:23

标签: iphone objective-c cocoa-touch ios4

我是Iphone Development的新手,

鉴于以下map。每当我选择像“西澳大利亚”这样的特定部分时,我想提出触摸事件。但是,该特定区域不是方形或圆形,而是提到触摸区域。边界不合适。我怎么能得到那个触摸事件?

请任何人指导我或给我一个教程如何使用该部分?

3 个答案:

答案 0 :(得分: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:)。

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

答案 1 :(得分:0)

这有几种选择,但只有一种选择可以实现。

首先,您将无法使用UIButtons等常规控件完成此操作 - 相反,您将希望自己处理触摸事件。

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

在这种情况下,您需要做的就是检查触摸点下方的像素的颜色。这样的事情是在example内完成的。

-2-自定义触摸地图;几何对象的地图,最好是三角形。

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

答案 2 :(得分:0)

@Jim对一般的便携式算法提出了很好的建议。由于您使用的是iPhone,因此将地图信息转换为UIBezierPath对象可能会很方便。有关如何创建此类路径对象的详细信息,请参阅Drawing and Printing Guide。然后,您可以使用[UIBezierPath containsPoint:]为您执行命中测试。如果您想要与网页具有相同的效果,那么拥有路径对象也可以方便地进行突出显示。