iPhone、地图、可点击的非矩形区域

Posted

技术标签:

【中文标题】iPhone、地图、可点击的非矩形区域【英文标题】:iPhone, Map, Clickable non-rectangular areas 【发布时间】:2010-10-26 14:50:26 【问题描述】:

有人对我如何在 iPhone 上实现以下功能有任何想法吗?我们有一张美国地图,它有不同颜色的不同区域(我相信是气候区域)。它们不是矩形的,并且不遵循州、邮编、县或任何其他定义的线。所以,我们的区域非常圆,甚至不一定是连续的。

我很乐意让我们的用户能够点击他们的区域,我将能够分辨出他们从哪里触摸到了哪个区域,但是对于我来说,没有制作很多很多矩形来做一个最适合曲线,我不知道该怎么做。

有什么想法吗?

编辑:这些地区可能会像这样难...link text

【问题讨论】:

如果地图是彩色编码的,为什么不让您的用户点击任意位置然后查看他们选择的像素? 呃。呃。真是太棒了。我会调查的。 尼基尔——两件事。首先,让您的评论成为答案,我会接受它。但其次,您知道对 iPhone SDK 触摸的颜色进行命中测试的代码吗? 【参考方案1】:

这些区域是如何定义的?如果可以获取点数据,则使用以下方法创建 CGPath:

CGPathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path,null,xpoints[0],ypoints[0])
for (int i = 1; i < numpoints; ++i) 
  CGPathAddLineToPoint(path,null,xpoints[i],ypoints[i]);

CGPathCloseSubpath(path);

然后每当用户触摸时,对于每个区域,检查它是否包含触摸点:

if (CGPathContainsPoint(path,null,touchPoint,false)) ...

完成区域后不要忘记发布:

CGPathRelease(path);

请注意,您可以在一个 CGPathRef 中创建多个单独的子路径,当您检查是否包含时,它将检查所有子路径。

如果您愿意,可以尝试使用弧线或曲线来使线条正确,但我不太熟悉。

【讨论】:

好主意。我不确定我能否成功(我编辑了我的问题以链接到示例地图)。制作这些类型的路径,或者至少是它们的近似值,可能有点困难。 看了图片后,我很好奇,就尺寸而言,这张图片的准确度如何?您不希望有一个比大约 44x44 像素小太多的区域,否则用户将无法点击它。然而,Nikhil 的想法还不错。看看他们点击的颜色。出于好奇……您是否真的只是展示了一张图片,没有任何其他数据? Ed:老实说,我们现在正处于计划阶段,所以我将与图形艺术家合作。实际上,我们可能会制作一个巨大的地图切割成多个部分,并允许缩放,以便他们可以非常精确地点击。不过,很棒的 cmets。【参考方案2】:

也许您需要一个颜色编码的位图来进行命中测试。

您将要显示一个位图,但另一个位图具有单色编码区域。当用户点击显示地图时,您会检查该像素在您的命中测试地图中的颜色,然后执行适当的操作。

【讨论】:

以上是关于iPhone、地图、可点击的非矩形区域的主要内容,如果未能解决你的问题,请参考以下文章

iPhone Mapkit 蓝点/用户位置区域缩放问题

iPhone 网页版(Safari 或 Chrome)点击查看地图

Iphone长按导致弹出一些矩形放大镜[重复]

如何在地图视图 iphone 或 ipad 上获得可移动的图钉?

数学(几何):矩形投影?

iphone模拟器MapView不加载,而是显示灰色瓷砖