2016-05-16 70 views
6

IOS上的Mapkit是否支持重叠出队? (就像注释一样)。如果是这样的代码是什么?Mapkit on IOS支持重叠排队吗? (就像注释一样)

背景:通过注释,我相信你可以添加很多,让MapKit在需要时通过出列方法实例化视图。然而,如果我在全国有很多地方,覆盖物的情况如何呢?我是否需要编写代码来检查哪些叠加层是可见或不可见的,然后实例化它们/将它们自己实时删除?

+0

PS。此外,无论人们是否真的(如果这是一个问题)将覆盖图放在地图上作为“注释”,以解决这个问题?可能不适用于大型叠加层,但作为叠加层的一部分可能不在屏幕上...... – Greg

+0

PSS。实际上在全国各地有大约8000个左右的覆盖到位,所以最终我是否会预先加载它们,还是我需要自己手动管理它们,以便在任何时间点只加载更小的数字?即那些将是可见的 – Greg

回答

3

Map Kit不支持以与支持注解视图相同的方式重用覆盖图。其中一个原因肯定是这两个对象不是类似的。覆盖图是表示地图上区域的模型对象,而注记视图是不时用于显示地图上注释位置的视图对象。重用视图对象(而不是为每个用户创建单独视图对象)的技术是在UIKit中的其他几个位置使用的优化,特别是对于表视单元和集合视图的各种位。

视图重用模式是建立一些数据索引(表索引的路径,地图坐标),然后有一个代表提供当一个特定的索引/位置进入视野使用恰当的视图对象。当数据对象不在视线内时,视图对象将被循环到队列中。

注释是类似于覆盖,并MapKit不会为他们提供任何重用并有很好的理由:他们是正在显示的数据!

注解视图的类似对象是覆盖渲染器,它(当然!)为覆盖图提供渲染。我假设这些不被重用的原因是因为它们不是查看系统对象,并且可能更轻,所以重用几乎没有什么好处。我们发现这样的证据,即在iOS 7.0之前,MapView代理确实为提供了覆盖图的视图对象,并且这已被渲染器概念所取代。

我希望有帮助。

这对您造成了什么问题?附件号码:

+0

我有几百覆盖整个国家。是否可以加载大量数据,然后将其留给MapView来优化需要显示的内容?可能需要将这些添加到主线程中,以便在应用程序启动时的启动时间对用户不明显,那我想呢?也有是如何获得可见覆盖仅适用于我在这里有一个问题清单的问题:http://stackoverflow.com/questions/37433336/how-to-get-visible-overlays-in-mapkit-ie -mkoverlay-mkoverlayrender-从-A-MA – Greg

+0

PS其实在全国有大约8000左右覆盖到位,所以最终我加载它们都在前期,或者我需要管理他们自己手动使得仅在任何一个时间点加载的数字要小得多?即那些将是可见的 – Greg

+0

8000是一个很大的数字。 我测试了覆盖美国的7200个覆盖图,并在iPhone 5/iOS 9.3上看到了明显的缓慢。为了体面的表现,做一些平铺是必要的。但是,我采取了一个简单的措施,这并不是特别有希望。它看起来像添加或删除大量覆盖本身的操作本身并不是很快。也许你可以重新组织你的数据,以便每个MKOverlay代表地图区域内的“叠加层”图块。您的叠加渲染器在绘制适当的数据项时需要非常聪明。 – BrentM