如何从iOS上的UITouch找到最近的站点

时间:2015-05-30 03:50:59

标签: ios objective-c cgpoint

我正在尝试制作iOS地铁地图应用程序。

我的地铁地图imageview看起来像这样:

enter image description here

当用户触摸关闭某处(以便用户不必触及完全位置)到电台时,我想突出显示不同颜色的车站。

考虑到这个地铁地图是一个大图像,确定该站的哪个CGPoint是用户打算触摸的最有效的方法是什么?

例如,

我想要做的是:如果一个电台位于地图上的(10.0,10.0) - >即使用户触摸 NEAR 那个点(例如:(12.3,10.3),(10.5,11.0),(13.0,12.3)等),也要选择此电台。

我正在考虑两种方法:

  1. 有一组数组(或字典),其中包含图像上工作站的所有x和y位置 - >当用户触摸图像时 - >使用毕达哥拉斯定理计算UITouch CGPoint站点之间的距离。(或许可以通过使用适当的数据结构来加快它的速度?)

  2. 地铁地图上每个站点的布局透明UIButtons。让用户触摸UIButton。(我也怀疑这是否会使应用变慢)

  3. 有人能告诉我如何从用户的UITouch CGPoint中检测到最近的站点吗?

1 个答案:

答案 0 :(得分:1)

您的问题有各种解决方案。您正在寻找的是Nearest Neighbor Search 算法。

如果您可以优化它,您的方法1看起来很好。由于您已经知道了地图,因此将所有站点存储在已排序的数组中会有所帮助。