3

我目前正在开发一个带有深色主题的 iOS 应用程序,并且非常希望将显示的 Apple Map 也设为深色。

我已经在 Google 上搜索了该主题并尝试通过 Storyboard 更改组件的属性。但是,我什么也找不到。

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

谢谢你。

4

3 回答 3

1

这有点笨拙和有限,但是您可以UIView在地图上放置一个黑色背景颜色和小于 1.0(例如 0.3)的 alpha(确保关闭用户与此视图的交互,以便手势传递到地图),并且会使整个事情变暗。有点笨拙,你会失去对比,但这可能值得一试。

于 2013-08-26T19:36:11.297 回答
0

如果不使用像MapBox这样的第三方提供商,您将无法做到这一点,至少在 iOS 6 及更低版本上是这样。

于 2013-08-27T15:28:06.703 回答
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)!
    }
  }

然后在你的MKMapViewwith上设置叠加层

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
    }
}
于 2019-05-14T14:28:11.660 回答