首页 > 解决方案 > 自 pod 更新以来,iOS 地图左上角的 GoogleMaps 相机目标

问题描述

我有一个应用程序,用于在 GoogleMap 上放置图钉,然后将这些点保存到 Firebase 数据库,然后用作另一个应用程序中最终用户的参考。

我最近将应用程序中的 pod 更新为Using GoogleMaps (3.3.0). 该地图以前工作正常,但现在当我转到地图时,它从我认为的纬度/经度 0,0 开始。一旦我与地图交互(比如拖动它),它就会弹出到我指定它开始的任何目标。此外,当我放下我指定要放在 上的别针时camera.target,它曾经按预期落到中心。标记现在落在地图的左上角。我以前使用的代码运行良好,并且在构建或运行时没有错误。看来 camera.target 似乎是

我在这里看到了对它的“短暂”引用:https ://github.com/flutter/flutter/issues/24806

在这里: 左上角的谷歌地图中心

但在这两种情况下,情况似乎都不完全相同。

编辑:将手机旋转到横向和向后似乎可以正确重置所有内容,这使得它看起来像是一个视图问题,而不是地图问题或加载时间问题,尽管当地图从 0,0 开始时,它更适合加载时间问题。

如果这是 pod 的错误,我假设我会在整个堆栈中找到它,但我很难看出这是我的代码的问题,因为它工作得很好,而且我没有看到任何变化在 SDK 的演练中暗示我的代码现在存在某种缺陷。

加载使用 IB override func viewDidLoad() { super.viewDidLoad() 创建的 mapView

let ud = UserDefaults.standard
    let startingX = ud.double(forKey: "startingX")
    let startingY = ud.double(forKey: "startingY")

    let camera = GMSCameraPosition.camera(withLatitude: startingX, longitude: startingY, zoom: 18.0)
    googleMapView.camera = camera

    self.googleMapView.mapType = .hybrid

    self.googleMapView.settings.scrollGestures = true
    self.googleMapView.settings.rotateGestures = true
    self.googleMapView.settings.consumesGesturesInView = true
}

当我创建标记时:

@IBAction func createPinButtonPressed(_ sender: Any) {

    if self.CoordinateSelectorSegment.selectedSegmentIndex == 0
    {

        if backTeeMarker.map == nil {
        backTeeMarker.position = self.googleMapView.camera.target
        backTeeMarker.title = "back tee"
        backTeeMarker.map = googleMapView
        backTeeMarker.isDraggable = true
        backTeeMarker.icon = GMSMarker.markerImage(with: .red)
        }
    }
...
}

标签: iosswiftgoogle-maps-sdk-ios

解决方案


我发现我可以通过将地图创建添加到 ViewWillAppear 来解决这个问题,而不是将它放在 ViewDidLoad 中。

 override func viewWillAppear(_ animated: Bool) {
    let ud = UserDefaults.standard
    let startingX = ud.double(forKey: "startingX")
    let startingY = ud.double(forKey: "startingY")

    let camera = GMSCameraPosition.camera(withLatitude: startingX, longitude: startingY, zoom: 18.0)
    googleMapView.camera = camera

    self.googleMapView.mapType = .hybrid

    self.googleMapView.settings.scrollGestures = true
    self.googleMapView.settings.rotateGestures = true
    self.googleMapView.settings.consumesGesturesInView = true
}

推荐阅读