我有一个应用程序,要求用户的位置不断更新,以便我可以显示他们当前的坐标和海拔高度。我正在使用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和其他几个地方,但这导致应用程序崩溃,因为它无法及时找到用户。
有没有人对如何使这项工作有任何建议?感谢。
答案 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))