6

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

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

有任何想法吗?

编辑:这些地区可能和这一样难…… 链接文本

4

2 回答 2

10

这些区域是如何定义的?如果您可以获取点数据,则使用以下命令创建 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 中创建多个单独的子路径,当您检查是否包含时,它将检查所有子路径。

如果你愿意,你可以尝试使用弧线或曲线来使线条正确,但这是我不太熟悉的东西。

于 2009-05-15T22:59:27.873 回答
8

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

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

于 2009-05-18T17:24:22.697 回答