MKOverlayRenderer比MKOverlayView差吗?

时间:2014-03-18 22:09:46

标签: ios uikit mapkit

我正在开发一个基于地图的应用程序,我正在使用MBXMapKit框架(基于MapKit构建),以便在我的MapView中显示自定义Mapbox地图图块而不是默认的Apple地图。然而,虽然Apple的地图是矢量,但Mapbox仍然是光栅图像切片,因此它们会被MBXMapKit框架显示为叠加。

这一切都很好,直到我使用MKOverlay在地图上绘制折线。根据我的理解,在iOS 7之前,您将向MapView委托提供MKOverlayView,该委托将呈现在地图上,但现在在iOS 7中,已被弃用而不是MKOverlayRenderer,如果我理解正确的话,函数更像是drawRect的各种类型,我直接绘制到一个上下文中,结果显示在地图上(我知道这并不是它的确切工作原理但重点是我无法再访问普通的UIView,这是我出现问题的地方。)

第一个问题是,当我的叠加层被绘制到地图时,它会逐层绘制。这很好,除了叠加图块似乎与底层的Mapbox图像图块合成。这样就能够看到一条简单的折线,有3或4个点需要一个坚实的半秒来渲染(在A7 iPad Air上),你可以看到它出现在' chunks'重绘每个图块。它也出于某种原因导致所有未受影响的Mapbox磁贴重新加载(它们都闪烁一瞬间)。显然,从用户体验的角度来看,这看起来像个笑话,是完全不可接受的。

第二个问题是,因为我无法像iOS 6中那样访问UIView,所以我也不知道如何为叠加设置动画 - 我能做什么就像是淡化折线而不是立即显示它(虽然在这一点上我会立即显示整个东西,然后看着它逐层渲染,就像它从点阵中吐出一样打印机,但你明白我的观点。)

所以我的主要问题是,我错过了什么,或MKOverlayRenderer FAR不如MKOverlayView那么灵活和有用吗?从逻辑上讲,您可以将地图上的图层视为可以操纵的单个对象,将事件绑定到该图层等,而不是将某些光栅像素数据刻录到地图中,并且永远不会再次修改或者与之交互(没有重新绘制整个内容),而threads like this似乎暗示Apple已经基本上删除了使用以前能够轻松完成的叠加层执行大量操作的功能。

由于MKOverlayView现已弃用,因此不再调用相应的委托方法,是否有解决这些问题的方法?由于性能问题和缺乏动画能力,我现在无法将其用于生产应用程序。

编辑:我在绘制MKOverlay时注意到的另一个性能问题是,它影响了绘图发生时发生的其他动画 - 当我点击地图注释时,工具提示弹出动画,同时打开动画折线渲染开始时,渲染会导致工具提示动画丢帧。

1 个答案:

答案 0 :(得分:1)

简短的回答是,是的,情况更糟。

https://github.com/mapbox/mbxmapkit/issues/39

中建议将https://stackoverflow.com/a/22769258/2924596作为 incanus (MBXMapKit的作者)的讨论