我目前正在开发一个黑暗主题的iOS应用程序,并且真的想让显示的Apple Map也采用深色。
我已经Google搜索了主题并尝试通过Storyboard更改组件的属性。但是,我找不到任何东西。
这甚至可能吗?我可以更改Apple Map组件的颜色......或者甚至只是反转颜色以使其看起来很暗?
谢谢。
答案 0 :(得分:1)
它有点笨拙且有限,但你可以在地图上放置一个黑色背景颜色{alpha}和小于1.0(例如0.3)的UIView
(确保关闭用户与此视图的互动,这样手势就会得到传递到地图)这会使整个事情变暗。有点笨拙,你会失去对比,但它可能值得尝试。
答案 1 :(得分:0)
如果不使用MapBox之类的第三方提供商,至少在iOS 6及更低版本上,则无法执行此操作。
答案 2 :(得分:0)
您可以创建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
}
}