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

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

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

有什么想法吗?

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

【问题讨论】:

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

标签: iphone imagemap


【解决方案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】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    相关资源
    最近更新 更多