我目前正在开发一个带有黑色主题的iOS应用程序,并希望将显示的Apple地图也设置为暗色调。
我已经通过Google搜索了该主题,并尝试通过Storyboard更改组件的属性。但是,我找不到任何方法。
这是否可能?我可以更改Apple地图组件的颜色...甚至只是反转颜色以使其看起来更暗吗?
谢谢。
我目前正在开发一个带有黑色主题的iOS应用程序,并希望将显示的Apple地图也设置为暗色调。
我已经通过Google搜索了该主题,并尝试通过Storyboard更改组件的属性。但是,我找不到任何方法。
这是否可能?我可以更改Apple地图组件的颜色...甚至只是反转颜色以使其看起来更暗吗?
谢谢。
虽然有些笨拙和局限性,但是您可以在地图上放置一个黑色背景颜色且透明度小于1.0(例如0.3)的UIView
(确保关闭此视图的用户交互,以便手势传递到地图),这将使整个地图变暗。虽然会失去对比度,但也许值得一试。
MKTileOverlay
的子类,例如:class DarkModeMapOverlay: MKTileOverlay {
init() {
super.init(urlTemplate: nil)
canReplaceMapContent = true
}
override func url(forTilePath path: MKTileOverlayPath) -> URL {
let tileUrl = "https://a.basemaps.cartocdn.com/dark_all/\(path.z)/\(path.x)/\(path.y).png"
return URL(string: tileUrl)!
}
}
然后使用以下代码在您的 MKMapView
上设置覆盖层:
class MapViewController: UIViewController, MKMapViewDelegate {
private var tileRenderer: MKTileOverlayRenderer?
private var mapView: MKMapView {
return view as! MKMapView
}
private func configureTileRenderer() {
let darkModeOverlay = DarkModeMapOverlay()
tileRenderer = MKTileOverlayRenderer(tileOverlay: darkModeOverlay)
mapView.addOverlay(darkModeOverlay, level: .aboveLabels)
}
override func loadView() {
view = MKMapView(frame: .zero)
}
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
configureTileRenderer()
}
// MARK: MKMapViewDelegate
func mapView(_: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
guard let renderer = self.tileRenderer else {
return MKOverlayRenderer(overlay: overlay)
}
return renderer
}
}
在 iOS 6 及以下版本中,如果不使用第三方提供商(如 MapBox),则无法完成此操作。