【问题标题】:Build Map like implementation in iOS Using Scroll View and Image View使用滚动视图和图像视图在 iOS 中构建类似地图的实现
【发布时间】:2016-06-07 02:40:16
【问题描述】:

我想用自己的图像构建地图。图像将是这样的房屋计划。我有一个实施方案,只需要这里的专家建议来更好地实施它。

我的方式,

  1. 设置滚动视图和图像视图,启用滚动并将内容偏移设置为图像帧。
  2. 设置代理,以便我可以放大/缩小和平移图像。
  3. 图像加载后,创建一个自定义视图对象来表示具有位置、图像和名称等详细信息的 Pin / Marker,并将它们作为子视图添加到图像视图中。

这就是展示地图的全部内容。但是我有两个重要的问题要处理。

  1. 我应该能够在任何边缘/角落检测到相交的引脚/标记,以便我可以决定是否应该显示名称。为此,我需要一个更好的碰撞检测算法(建议一个)。每次缩放图像时都应重新绘制图钉/标记。我不想使用集群算法来组合我的引脚。
  2. 当我调整图像视图的大小时,我应该保持子视图的位置和大小,所以我想我需要根据缩放比例重新计算视图的位置,并在 scrollViewDidZoom 委托中进行。

仅此而已。可能不是最好的方法,所以寻找最好的或者说它更好。

谢谢。

【问题讨论】:

  • 有人想结束这个问题,说它很广泛,但我的问题很具体,我的方法是否有效/是否有人可以更有效地解决相同的问题。如果我问如何做到这一点,这是一个广泛的话题,但我没有。当说它需要用几行 cmets 关闭时,请证明你的行为是合理的,这样我以后可以避免同样的问题。

标签: ios objective-c google-maps collision-detection


【解决方案1】:

我为客户端应用程序做了几乎你所描述的事情。工作量很大。

地图通常很大,可以在很宽的范围内显示。您希望它们从最接近的缩小到整个地图适合屏幕的比例都看起来不错。为此,您确实需要以各种比例构建地图并将其划分为图块(类似于 OpenGL 中纹理渲染中常用的“mipmapping”。)

这就是我构建自定义地图引擎的方式。我的开发基于 Apple 的一个名为“PhotoScroller”的示例应用程序。

但是,该开发是在 iOS 6 下开始的。Apple 此后添加了对地图叠加层、叠加层渲染器和平铺渲染器的支持。现在可以创建您自己的自定义地图图块并将它们存储在设备上或从网络下载,而无需求助于您自己的自定义地图引擎。

如果让我再做一次,我几乎肯定会使用平铺叠加层和 MapKit,而不是自己构建一个新的地图引擎。看看这个在线教程: Custom and Offline Maps Using Overlay Tiles

【讨论】:

  • 这就是我在网上看到的。但是我读到的一些地方在缩放时会出现问题,但我从来没有自己尝试过。我接受您的建议,并将继续使用地图图块。并且一定会发布更新,如果瓷砖满足我的所有要求,我会接受答案。现在感谢 (+1) 回复。至少我对我的问题有一个回应:)
  • +Duncan,它是一个支持项目,在它之上构建了很多组件。我认为用 MkMapView / TiledOverlay 替换所有内容并不好。因此,我将使用旧代码进行修复,使用四叉树/k 平均聚类/碰撞算法在图像视图上放置标记,以确定要在不同缩放级别显示的引脚。
  • 请记住,iOS 设备内存不足,因此显示大于屏幕的图像会导致很大的内存压力,甚至可能导致您的应用程序终止。您确实需要将大图像拆分为各种分辨率的图块。看看 Apple 的 PhotoScroller 示例应用程序(如果您在 Xcode 帮助系统中搜索“PhotoScroller”,您会找到它。该应用程序是一个使用各种比例的图像块的工作示例。它没有显示如何但是创建图块。我必须自己编写图像图块生成器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多