是否可以更改Apple Map颜色?

时间:2013-08-26 19:21:58

标签: ios colors mapkit

我目前正在开发一个黑暗主题的iOS应用程序,并且真的想让显示的Apple Map也采用深色。

我已经Google搜索了主题并尝试通过Storyboard更改组件的属性。但是,我找不到任何东西。

这甚至可能吗?我可以更改Apple Map组件的颜色......或者甚至只是反转颜色以使其看起来很暗?

谢谢。

3 个答案:

答案 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
    }
}