Swift - GMSMapView animate(toLocation:) / animate(to:CameraPositon) 不工作

Swift - GMSMapView animate(toLocation:) / animate(to:CameraPositon) not working

这就是我初始化 map - GMSMapView

的方式
class ViewController: UIViewController {
   var map = GMSMapView()

   override func viewDidLoad() {
       super.viewDidLoad()
       setupGoogleView()
   }

   private func setupGoogleView() {
       guard let coordinates = getUserLocation() else { return }
       let camera = GMSCameraPosition.camera(withLatitude: coordinates.latitude, longitude: coordinates.longitude, zoom: 16.0)
       self.map = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
       map.settings.tiltGestures = false
       map.mapType = .satellite
       map.delegate = self
       map.frame = view.frame
       self.view.addSubview(map)
   }
}

当我从文件中的其他地方调用此函数时出现问题

private func animateTo(location: CLLocationCoordinate2D) {
    DispatchQueue.main.async {
        let cameraPosition = GMSCameraPosition(target: location, zoom: 20)
        self.map.animate(toLocation: location)
        self.map.animate(to: cameraPosition)
    }
}

我正在尝试将相机重新定位到某个坐标,但没有任何反应。 我已经尝试了 Whosebuggoogle 上的所有解决方案。

我在 location 中有 latlng - 选中。该函数被调用 - 选中。

我也试过self.view.layoutSubviews()self.view.layoutIfNeeded(),还有map

尝试使用 CLLocationManagerDelegate

// Handle authorization for the location manager.
    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        switch status {
        case .restricted:
            print("Location access was restricted.")
        case .denied:
            print("User denied access to location.")
            // Display the map using the default location.
            mapView.isHidden = false
        case .notDetermined:
            print("Location status not determined.")
        case .authorizedAlways: fallthrough
        case .authorizedWhenInUse:
            print("Location status is OK.")
            getFilialList()
        @unknown default:
            fatalError()
        }
    }

然后

 // Handle incoming location events.
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let location: CLLocation = locations.last!
        print("Location: \(location)")
        let camera = GMSCameraPosition.camera(withLatitude: location.coordinate.latitude,
                                              longitude: location.coordinate.longitude,
                                              zoom: 12)
        DispatchQueue.main.async {
            self.mapView.animate(to: camera)
            self.locationManager.stopUpdatingLocation()
        }
    }

我设法解决了这个问题:

self.view.subviews.forEach { (view) in
   if let mapView = view as? GMSMapView {
      // do update on mapView here
   }
}