苹果地图的颜色能否更改?

3

我目前正在开发一个带有黑色主题的iOS应用程序,并希望将显示的Apple地图也设置为暗色调。

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

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

谢谢。


我不知道这里的任何答案是否有帮助:https://dev59.com/BGPVa4cB1Zd3GeqP3jZH 或 https://dev59.com/JGrXa4cB1Zd3GeqPC85X - Rob
谢谢。然而,叠加层似乎不能给MKMap提供黑色主题。我真的想继续使用苹果地图,而不转向谷歌或任何其他第三方提供商。 - thedp
我也有自定义地图主题的需求。你是如何实现的? - harshit2811
3个回答

1

虽然有些笨拙和局限性,但是您可以在地图上放置一个黑色背景颜色且透明度小于1.0(例如0.3)的UIView(确保关闭此视图的用户交互,以便手势传递到地图),这将使整个地图变暗。虽然会失去对比度,但也许值得一试。


这是一个不错的想法。但这还远远不够... 特别是在iOS7上。 我真的很希望它能被反转:/ - thedp
@thedp 同意。我带着忐忑的心情提出了这个建议,希望我上面发布的一些链接可能更有前途。可悲的是,MapKit并不能优雅地完成这项任务。 - Rob

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

0

在 iOS 6 及以下版本中,如果不使用第三方提供商(如 MapBox),则无法完成此操作。


MapBox不是免费的。我找不到有关Google Maps的信息。Gmaps支持暗色主题吗? - thedp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接