2017-01-03 4 views

Antwort

2

Der Mechanismus zum Ersetzen der Kartenkacheln basiert auf der MKOverlayRenderer-Klasse. Sie müssen Ihre eigene MKOverlayRenderer-Unterklasse erstellen, in der Sie die Anzeige der Kartenkacheln anpassen können. In dem ViewController, in dem Sie Ihre Map verwenden, müssen Sie ein Overlay zu Ihrer MKMapView hinzufügen, um die Rendering-Methode von MKMapViewDelegate auszulösen.

Beispielcode:

//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 
    } 
} 

Und das Ergebnis ist:

Result

Verwandte Themen