我找到了一种使用MapKit缓存切片的方法,但是我还没有找到任何解决方案来加载区域内的所有切片,从顶层切片到底层切片。
我想在mapview中缓存矩形区域的所有切片。在Mapkit中有什么办法吗?
答案 0 :(得分:1)
要在MKMapView
中加载自定义切片,您需要继承MKTileOverlay
并覆盖方法
url(forTilePath path: MKTileOverlayPath) -> URL
MKTitleOverlay
包含图块的x,y和z属性。
所以实现可能如下所示:
override func url(forTilePath path: MKTileOverlayPath) -> URL {
let tilePath = Bundle.main.url(
forResource: "\(path.y)",
withExtension: "png",
subdirectory: "tiles/\(path.z)/\(path.x)",
localization: nil)!
return tile
}
在mapView
设置功能中添加以下内容:
let overlay = CustomTileOverlay()
overlay.canReplaceMapContent = true
mapView.add(overlay, level: .aboveLabels)
也不要忘记在
中返回渲染器func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
return MKTileOverlayRenderer(tileOverlay: overlay)
}
P.S。关于该主题的raywenderlich.com有一个很棒的教程: