iOS Swift MKMapView删除地图图块

时间:2017-01-03 14:08:26

标签: ios mkmapview mapkit

在我的应用程序中,我想在MKMapView上显示注释,但我不希望用户看到地图图块,我希望它们完全是黑色的。 我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分:2)

替换地图图块的机制基于MKOverlayRenderer类。您需要创建自己的MKOverlayRenderer子类,您可以在其中自定义地图图块的显示。 在使用地图的ViewController中,您需要向MKMapView添加叠加层以触发MKMapViewDelegate的渲染方法。

示例代码:

//Subclass of MKOverlayRenderer to tint the tiles
class MyCustomOverlayRenderer: MKOverlayRenderer {
    override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) {
        let drawRect = self.rect(for: mapRect)
        context.setFillColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
        context.fill(drawRect)
    }
}

//Custom View Controller where the map can be found
class ViewController: UIViewController {

        @IBOutlet weak var mapView: MKMapView!

        override func viewDidLoad() {
            super.viewDidLoad()

            self.mapView.delegate = self

            let tiles = MKTileOverlay(urlTemplate: nil)
            tiles.canReplaceMapContent = true
            self.mapView.add(tiles)
       }

       //Custom method to add an annotation onto your mapView
       @IBAction func mapViewTapped(_ sender: Any) {

            let annotation = MyCustomAnnotation(coordinate: self.mapView.centerCoordinate, title: "MyAnnotation")
            self.mapView.addAnnotation(annotation)
        }
}

extension ViewController : MKMapViewDelegate
{
    //use your custom renderer to render all tiles
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        return MyCustomOverlayRenderer(overlay: overlay)
    }

    //show a pin in the middle of you map
    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

        return nil
    }
}

结果是:

Result