具有折线或注释的MapView在缩放时丢失图块

时间:2016-07-04 22:38:45

标签: ios swift mkmapview

我在IOS应用程序中有一个使用缓存的本地磁贴的MKMapView,效果很好。可以缩放,移动等...

然而,当我添加注释或折线时,它仍然可以正常工作,直到缩放达到某个缩放级别,然后注释和折线下的图块不会显示,但所有其他图形都可以。

zoomed out at the right level

Zoomed in one two many levels.

如果删除注释/线条,地图会正确放大,并且适用于注释/线条所在的区域。

有什么想法吗?

我把它减少到最小的测试用例。这一直运行,直到你放大,然后折线下的任何瓷砖消失。缩小并重新出现。

reloadData

1 个答案:

答案 0 :(得分:1)

我看到你提出这个问题已经过去了三个月,但如果仍有兴趣,我会分享我发现的内容。

我已经添加了使用MKMapSnapshotter从Apple下载地图图块的功能,并将它们存储到一组图块目录中,以便在您离开蜂窝服务区域时使用,这非常有效。根据用户的选择,目录涵盖3到6个不同的缩放级别,根据iOS标准,平铺图像按照缩放级别命名的目录下的子目录排列。

当使用MKTileOverlayRenderer显示它们时,它会在图像之间适当切换,以便在我用于设置MKTileOverlay对象的MKMapRectMake中指定的最小和最大缩放级别之间进行缩放级别。

地图会在所有指定的缩放级别上正确显示所有切片,并在尺寸更改时重新绘制切片。当显示器高于最大或低于最小缩放级别时,它会继续显示最大或最小缩放级别的图块一段时间,因为它没有新尺寸的图块图像。当没有折线时,这可以正常工作,但系统会重新绘制折线下面的方块以调整线条的大小,当它这样做时,它会清除平铺图像并查找新缩放级别的图块。由于它没有那些瓷砖,这些方块在瓷砖水平上会变空,虽然没有被折线重叠的方格不会被清除,因此保留旧图像。

顺便说一下,你可能已经遇到过这种情况,但是如果你没有,你需要继承MKTileOverlay,这样你就可以设置由瓷砖映射的区域的位置和大小。

希望所有这些都有助于解释事情,即使它不一定能解决你想要做的事情的问题。