2017-01-03 11 views

答えて

2

マップタイルを置き換えるメカニズムは、MKOverlayRendererクラスに基づいています。マップタイルの表示をカスタマイズできる独自のMKOverlayRendererサブクラスを作成する必要があります。 マップを使用しているViewControllerで、MKMapViewDelegateのレンダリングメソッドをトリガーするために、MKMapViewにオーバーレイを追加する必要があります。

例コード:

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

関連する問題