Google Maps iOS SDK在每次更新位置后阻止相机缩放

时间:2016-08-03 15:46:54

标签: ios swift google-maps

我有一个应用程序,要求用户的位置不断更新,以便我可以显示他们当前的坐标和海拔高度。我正在使用didUpdateLocations函数执行此操作:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if let location = locations.last {
        mapView.camera = GMSCameraPosition(target: locationManager.location!.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
        let locValue : CLLocationCoordinate2D = manager.location!.coordinate
        let altitude : CLLocationDistance = Double(round(1000*manager.location!.altitude)/1000)
        let long = Double(round(10000*locValue.longitude)/10000)
        let lat = Double(round(10000*locValue.latitude)/10000)
        let alt = String(altitude) + " m"
        latitudeLabel.text = String(lat)
        longitudeLabel.text = String(long)
        altitudeLabel.text = alt
        showLearningObjectsWithinRange(location)
    }
}

问题是,当我尝试放大地图上的某个位置时,如果我稍微移动设备,相机会再次缩小。显然这是因为我的didUpdateLocations函数中的第一行设置了摄像机位置,但是如果我删除该行,则地图根本不会居中到它们的位置。

我尝试将GMSCameraPosition代码移动到viewDidLoad,viewWillAppear和其他几个地方,但这导致应用程序崩溃,因为它无法及时找到用户。

有没有人对如何使这项工作有任何建议?感谢。

2 个答案:

答案 0 :(得分:0)

关于实施位置更新,GitHub中发布了一个问题 - Implement Responsive User Location Tracking Mode由于位置更新优化并通过线程,给定的解决方法显示地图上的用户位置是致电

nMapView.setMyLocationEnabled(true);

而不是:

nMapView.setMyLocationTrackingMode(MyLocationTrackingMode.TRACKING_FOLLOW);

然后,关于相机变焦,如Camera and View - Zoom中所述,您可以尝试设置最小或最大变焦以限制缩放级别。如上所述,

  

您可以通过设置最小和最大缩放级别来限制地图可用的缩放范围。

您也可以尝试此SO帖子中提供的解决方案 - Google Maps iOS SDK, Getting Current Location of user。希望它有所帮助。

答案 1 :(得分:0)

使用此而不是某一行(mapview.camera = ...)

mapView.animate(toLocation: CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude))