在mapView中加载区域的所有切片

时间:2017-09-10 18:23:16

标签: ios swift caching mapkit offline

我找到了一种使用MapKit缓存切片的方法,但是我还没有找到任何解决方案来加载区域内的所有切片,从顶层切片到底层切片。

我想在mapview中缓存矩形区域的所有切片。在Mapkit中有什么办法吗?

1 个答案:

答案 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有一个很棒的教程: