我正在开发一个基于地图的应用程序,我正在使用MBXMapKit框架(构建在MapKit上),以便在我的MapView中显示自定义Mapbox地图图块而不是默认的Apple图.然而,虽然Apple的地图是矢量,但Mapbox仍然是光栅图像切片,因此它们被MBXMapKit框架显示为叠加.
这一切都很好,直到我用地图在地图上绘制折线MKOverlay
.根据我的理解,在iOS 7之前,你会提供一个MKOverlayView
MapView委托,它将被渲染到地图上,但是现在在iOS 7中,已经被弃用了MKOverlayRenderer
,如果我理解正确,它的功能更像是一个drawRect
各种各样,我直接绘制到一个上下文,结果显示在地图上(我意识到这不是它的工作原理,但重点是我不再能够访问一个普通的旧版本UIView
,这就是我的问题出现的地方).
第一个问题是,当我的叠加层被绘制到地图时,它会逐层绘制.这很好,除了叠加图块似乎与底层的Mapbox图像图块合成.这样可以看到一个简单的折线,有3或4个点需要一个坚实的半秒来渲染(在A7 iPad Air上),你可以看到它在'chunks'中出现,因为每个瓷砖都被重新绘制.它也出于某种原因导致所有未受影响的Mapbox磁贴重新加载(它们都闪烁一瞬间).从UX的角度来看,这看起来像个笑话,完全不可接受.
第二个问题是,因为我不再能够访问UIView
iOS 6中的内容,我不知道如何为叠加设置动画 - 我想要的是淡化折线而不是立即显示它(虽然在这一点上,我会立即显示整个事物,然后看着它逐渐渲染,就像是从点阵式打印机中吐出一样,但你得到了我的观点).
所以我的主要问题是,我是否遗漏了某些东西,或者MKOverlayRenderer
FAR是否比FAR更不灵活和有用MKOverlayView
?从逻辑上讲,您可以将地图上的图层视为可以操纵的单个对象,将事件绑定到它等等,而不是将某些光栅像素数据刻录到地图中,并且永远不能再修改或者与之交互(没有重新绘制整个内容),这样的线程似乎表明Apple已经基本上删除了使用您以前能够轻松完成的叠加来执行大量操作的功能.
由于MKOverlayView
现在已弃用,因此不再调用相应的委托方法,这些问题是否有解决方案?由于性能问题和缺乏动画能力,我现在无法将其用于生产应用程序.
编辑:我在绘制时注意到的另一个性能问题MKOverlay
是它会影响在绘图发生时发生的其他动画 - 当我点击地图注释时,工具提示会在折线渲染开始的同时弹出动画,确保足够,渲染会导致工具提示动画丢帧.