4

更新到 iOS 6 后,我注意到在平移或缩放具有多个叠加层的 MKMapView 时服务器性能下降。我创建的一个应用程序有大约 600 个不同颜色的多边形叠加层,并且在 iOS 5 上运行无延迟(即使在较旧的 iOS 设备上),现在在 iOS 6 上运行极其滞后(在缩放和平移时),即使在最新的设备上也是如此。

我的直觉是,这是因为设备必须实际动态地创建地图(因为它基于矢量),而不仅仅是在屏幕上显示图块。

有没有人有任何想法来减少平移或缩放地图时遇到的滞后?

一些额外的信息,这种低帧率也会发生在缩放或平移覆盖层根本不显示在屏幕上的区域时,因此它与屏幕上出现的覆盖层的创建无关。

4

2 回答 2

1

您可以尝试将所有叠加层组合成一个。这可以显着提高性能。

这个想法是创建一个包含所有多边形的边界框的叠加层。这样,您mapView: viewForOverlay将始终被调用。为包含所有多边形的叠加层创建一个属性。然后在drawMapRect:覆盖视图的方法中,测试所有多边形是否相交mapRect并在必要时绘制它们。这很重要,因为您不想绘制屏幕外的多边形。

此策略基于 Apple 自己的 MapKit 示例项目。查看HazardMap以获取在单个 MKOverlayView 中绘制多个对象的示例,并查看BreadCrumb以获取如何有效测试多边形与方法mapRect中的当前相交的示例drawMapRect

于 2012-12-12T20:39:18.810 回答
0

我有一个简约的 MapKit 技术演示,当我在带有 iOS6 的 iPad 3 上运行它时,它明显滞后。分析显示它受 CPU 限制,但只有 0.2% 来自我自己的代码。在我的例子中,最大的罪魁祸首是渲染道路,然后是渲染标签——两者都是由 MapKit 完成的。我正在以 5 公里的规模展示旧金山市中心,因此有很多道路和标签要渲染。

所以这个故事的寓意是:iOS6 地图很慢。不过,无法告诉您这与 iOS5 或 iPad 2 相比如何。但它是滞后的,我几乎没有做任何自己的工作。

PS:打开 Instruments 并使用 Time Profiler。进行录音+深入研究以找到罪魁祸首。然后检查“隐藏系统库”以找出您的责任与 MapKit 相比有多少滞后。然后仅根据需要进行优化。

于 2013-06-18T20:24:24.643 回答