4

我目前正在将自定义地图从使用CATiledLayer滚动视图转换为使用MKMapView带有MKTileOverlay. 虽然CATiledLayer- 方法通常效果很好并且看起来更好,但您可以通过使用诸如旋转之类的方法免费获得很多东西,MKMapView否则这些东西很难实现。

因此,我重新绘制了我的图块,以使用推荐的缩放级别、列号和行号格式,并让它们正确显示在地图视图中。请注意,我的地图图块仅覆盖某处的一个小区域;我没有他们为整个地球。

我注意到的第一个问题是,当您放大超过我的图块支持的最大缩放级别时似乎存在问题。我的瓷砖一直缩放到 20 级,所以我将我MKTileOverlaymaximumZ属性设置为 20。如果放大到 21 级,地图视图根本不再请求瓷砖。在通往 21 级的路上加载的任何图块仍会显示(尽管是像素化的),但如果您滚动离开,它将不会加载更多图块,因此最终地图将变为空白。理想情况下,它会退回到我的 20 级图块并改为显示这些图块,或者阻止用户放大太多。当我使用 时CATiledLayer,您可以随意放大,并且它始终会显示放大最多的图块(即使您放大到比图块“舒适”的位置更远)。例子

我也有其他小问题:

如果您设置canReplaceMapContent为 true,您可以进一步放大(这很好),但是如果您离得太近,相机会夹住地面,并且我会得到各种渲染伪像。有什么办法可以防止这种情况发生?例子

有时,图块之间存在像素大小的小渲染伪影,这表明图块在MKMapView. 这些人工制品似乎不会影响本机地图应用程序;有什么办法可以摆脱这些?例子

当您在放大时平移时,加载瓷砖时会出现很多白色闪烁,这非常明显。当我使用 时CATiledLayer,它们被非常顺利地加载(通过动画不透明度),并且较低的缩放级别已经存在于背景中,因此总体上很难判断它是否使用瓷砖。有什么方法可以更无缝地加载我的图块吗?例子

我猜这些问题中的大多数的答案是无法修复 using MKMapView,这很遗憾,因为我真的希望允许用户更改地图的标题,而且使用标准似乎很难做到CATiledLayer

4

0 回答 0