MKOverlayRenderer 比 MKOverlayView 差?
Posted
技术标签:
【中文标题】MKOverlayRenderer 比 MKOverlayView 差?【英文标题】:MKOverlayRenderer worse than MKOverlayView? 【发布时间】:2014-03-18 22:09:46 【问题描述】:我正在开发一个基于地图的应用程序,并且我正在使用 MBXMapKit 框架(基于 MapKit 构建)以便在我的 MapView 中显示自定义 Mapbox 地图图块,而不是默认的 Apple 地图。然而,虽然 Apple 的地图是矢量的,但 Mapbox 的仍然是光栅图像切片,因此它们被 MBXMapKit 框架显示为叠加层。
这一切都很好,直到我使用MKOverlay
在地图上绘制一条折线。据我了解,在 ios 7 之前,您将向 MapView 委托提供 MKOverlayView
,该委托将被渲染到地图上,但现在在 iOS 7 中,已弃用 MKOverlayRenderer
,如果我理解的话正确地,功能更像是drawRect
,我直接绘制到一个上下文中,结果显示在地图上(我意识到这不是它的工作原理,但重点是我不再可以访问普通的旧UIView
,这是我的问题出现的地方)。
第一个问题是,当我的叠加层被绘制到地图上时,它似乎是逐块绘制的。这很好,除了覆盖图块似乎与底层 Mapbox 图像图块合成。这导致能够明显地看到具有 3 或 4 个点的简单折线(在 A7 iPad Air 上)需要半秒才能渲染,并且您可以在重绘每个图块时看到它出现在“块”中。由于某种原因,它还会导致所有未受影响的 Mapbox 瓦片重新加载(它们都闪烁一瞬间)。显然,从用户体验的角度来看,这看起来像是一个笑话,而且是完全不可接受的。
第二个问题是,因为我不再像在 iOS 6 中那样访问UIView
,所以我看不到如何为叠加层设置动画 - 我想要淡化折线而不是立即显示它(尽管此时我会立即显示整个内容,而不是看着它逐个地渲染,就像它从点阵打印机中吐出一样,但你明白我的意思)。
所以我的主要问题是,我是否遗漏了什么,或者MKOverlayRenderer
远不如MKOverlayView
灵活和有用?从逻辑上讲,您希望能够将地图上的图层视为可以操作、绑定事件等的单个对象,而不是您刻录到地图中并且永远无法再次修改的一些光栅像素数据或与之交互(无需重绘整个内容),threads like this 似乎暗示 Apple 已经从本质上删除了使用覆盖层做很多事情的能力,而这些事情过去很容易做到。
由于MKOverlayView
现在已弃用,因此不再调用相应的委托方法,是否有解决这些问题的方法?就目前而言,由于性能问题和缺乏动画能力,我无法将其用于生产应用程序。
编辑:我在绘制MKOverlay
时注意到的另一个性能问题是它会影响绘制时发生的其他动画 - 当我点击地图注释时,工具提示会在多段线渲染的同时弹出动画开始 - 果然,渲染导致工具提示动画丢帧。
【问题讨论】:
【参考方案1】:简短的回答是肯定的,情况更糟。
在https://***.com/a/22769258/2924596https://***.com/a/22769258/2924596 建议的 incanus(MBXMapKit 的作者)在此处查看讨论
【讨论】:
以上是关于MKOverlayRenderer 比 MKOverlayView 差?的主要内容,如果未能解决你的问题,请参考以下文章
mapView 更改时如何刷新 MKOverlayRenderer