2

我有一个静态地图图像,上面有一堆描绘城市的圆圈和正方形。我已将图像加载到一个子类在 scrollView 下的 imageView 中,以便我可以捕获用户触摸并在地图上缩放/滚动。我的挑战是,每当用户触摸城市的这些圆圈/正方形之一时,我想弹出一个标签,告诉他们它是哪个城市,并可能加载城市的详细视图。我想我可以将基于 imageView 地图的城市的所有相关 CGPoints 预加载到字典中,这样我就可以在“touchesBegan”事件期间引用它们,但我很快就会陷入困境并可能会解决这个问题错误道。

到目前为止一切正常,我可以捕获触摸的 CGPoint x 和 y 坐标。我遇到的最大问题是确定用户触摸与我在字典中可能有的离散点的接近程度。换句话说,如果字典有“Boston = NSPoint: {235, 118};” 如何判断用户何时接近该点而不让他们重复触摸直到准确?是否有一种简单的方法可以确定用户触摸是否“接近”预先存在的点?我会以正确的方式解决这个问题吗?

欢迎任何建议或耳光。

谢谢,迈克

4

3 回答 3

0

您可以使用R-Tree,也可以计算触摸与当前视图中每个可见点的接近程度。要计算接近度,您通常会使用勾股定理,但在这种情况下,您可以跳过平方根,因为您只是在比较相对大小。如果您喜欢说 50 像素平方等于 2500,您也可以声明距离截断。因此,您可以将结果放入包含距离和参考点的对象中,并将对象放入 NSMutableArray 中,而不是在截断下添加结果,并且选择最小的结果。

因此,如果您有一个 touch point pT,那么对于每个 point pN,您将计算:

d=(pT.x-pN.x)*(pT.x-pN.x) + (pT.y-pN.y)*(pT.y-pN.y); //d is the squared distance

pN具有最小值的点d是最接近 的点pT。就像我说的,如果你只想计算 10 像素内的触摸,你可以测试一下d <= 10*10

在 20x20 正方形区域内测试触摸的方法也有效,除非两个点彼此相距在 20 像素以内,那么您需要知道哪个是最近的触摸点。

于 2009-08-02T18:31:00.220 回答
0

您可以使用 UIButtons 来表示城市。然后,您将轻松获得标准的触摸、突出显示等行为。在地图上添加按钮作为子视图应该会使它们随地图缩放和滚动。

于 2009-08-02T19:54:45.307 回答
0

如果我理解正确,您想知道用户点击的点是否“足够接近”标记为城市的点。

you would have to quantify close i.e. set a threshold value after which the tap is farther, before which the tap is closer.

once you do that, calculate the cartesian coordinate distance sqrt ( (x1-x2)^2 + (y1-y2)^2) for each element ( read dictionary with x,y values for cities) in the array and store the results in another array. then take the minimum of the result. the index of that result is the city that is closest to the tap if it is lesser than the said threshold.

于 2009-08-03T03:03:36.257 回答