我目前正在开发一个带有深色主题的 iOS 应用程序,并且非常希望将显示的 Apple Map 也设为深色。
我已经在 Google 上搜索了该主题并尝试通过 Storyboard 更改组件的属性。但是,我什么也找不到。
这甚至可能吗?我可以更改 Apple Map 组件的颜色...甚至只是反转颜色以使其看起来很暗吗?
谢谢你。
这有点笨拙和有限,但是您可以UIView
在地图上放置一个黑色背景颜色和小于 1.0(例如 0.3)的 alpha(确保关闭用户与此视图的交互,以便手势传递到地图),并且会使整个事情变暗。有点笨拙,你会失去对比,但这可能值得一试。
如果不使用像MapBox这样的第三方提供商,您将无法做到这一点,至少在 iOS 6 及更低版本上是这样。
您可以创建一个类似的子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
with上设置叠加层
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
}
}