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

How to find closest station point from UITouch on iOS

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

我有一个看起来像这样的地铁地图图像视图:

当用户触摸某个地方时 close(这样用户就不必触摸 exact 位置)到车站,我想用不同的颜色突出显示车站。

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

例如,

我想做的是:如果一个站点位于地图上的 (10.0, 10.0) -> 即使用户触摸某处 NEAR 也选择该站点点(例如:(12.3、10.3)、(10.5、11.0)、(13.0、12.3)等)

我正在考虑两种方法:

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

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

谁能告诉我如何从用户的 UITouch CGPoint 检测最近的站点?

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

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