在我的应用程序中,我想在MKMapView上显示注释,但我不希望用户看到地图图块,我希望它们完全是黑色的。 我怎样才能实现这一目标?
答案 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
}
}
结果是: