iOS6上的MapKit的性能问题
在更新到iOS 6之后,我注意到在使用多个叠加层平移或缩放MKMapView时,服务器性能下降。 我创build的应用程序拥有大约600多种不同颜色的多边形覆盖图,并且在iOS 5上运行无延迟(即使是在较旧的iOS设备上),现在在iOS 6上运行极其缓慢(在缩放和平移时),即使在最新的设备上也是如此。
我的直觉是,这是由于设备必须实际dynamic地创build地图(因为其基于vector),而不是仅仅在屏幕上显示瓦片。
有没有人有任何想法,以减less平移或缩放地图时遇到的滞后?
一些额外的信息,这个低帧率也发生在缩放或平移覆盖层不显示在屏幕上的区域,所以它不会在屏幕上创build覆盖层。
您可以尝试将所有叠加层合并成一个叠加层。 这可以显着提高性能。
这个想法是创build一个包围所有多边形的边界框的覆盖。 这样,您的mapView: viewForOverlay
将始终被调用。 为覆盖您的所有多边形创build一个属性。 然后在覆盖视图的drawMapRect:
方法中,testing所有与mapRect
相交的多边形,并在必要时绘制它们。 这一点很重要,因为您不想绘制屏幕外的多边形。
这个策略是基于苹果自己的MapKit示例项目。 查看HazardMap以在单个MKOverlayView中绘制多个对象的示例,并查看BreadCrumb中的示例,了解如何在drawMapRect
方法中高效地testing多边形与当前mapRect
交集
我有一个简约的MapKit技术演示,并且在iOS6上运行iPad 3时,它显着滞后。 分析显示,它是CPU绑定,但只有0.2%是从我自己的代码。 在我的情况下,罪魁祸首是渲染道路,然后渲染标签 – 都由MapKit完成。 我正在以5KM的规模展示旧金山市中心,所以有很多道路和标签要呈现。
所以故事的道理是:iOS6地图是慢的。 但是,不能告诉你这是如何比较iOS5或iPad2。 但是这是滞后的,我几乎没有做任何我自己的工作。
PS:打开仪器并使用时间分析器。 做一个录音+深入find你的罪魁祸首。 然后检查“隐藏系统库”,以查明有多less延迟是您对MapKit的责任。 然后根据需要进行优化。