2
私のアプリでは、MKMapViewに注釈を表示したいが、マップタイルを見たいとは思っていない。完全に黒くしたい。 どのようにその外観を達成できますか?iOS Swift MKMapViewマップタイルを削除する
私のアプリでは、MKMapViewに注釈を表示したいが、マップタイルを見たいとは思っていない。完全に黒くしたい。 どのようにその外観を達成できますか?iOS Swift MKMapViewマップタイルを削除する
マップタイルを置き換えるメカニズムは、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
}
}
その結果は次のとおりです