我将地图设置为旋转到用户位置。我如何允许用户与地图进行交互?
I have the map set to rotate to the users location. How do I allow the user to interact with the map?
我将地图设置为居中并旋转到用户的位置和方向,但地图视图被锁定,因为我无法与其交互。
extension MapScreen: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else { return }
let region = MKCoordinateRegion.init(center: location.coordinate, latitudinalMeters: regionInMeters, longitudinalMeters: regionInMeters)
mapView.setRegion(region, animated: true)
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
checkLocationAuthorization()
func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
mapView.camera.heading = newHeading.magneticHeading
mapView.setCamera(mapView.camera, animated: true)
}
}
}
}
我如何让用户探索周围的环境?滚动、缩放、与图钉交互等,同时向用户居中和旋转?
通过使用 didUpdateLocations
委托方法,您可以不断更新地图视图,覆盖用户所做的任何更改。
解决方案是不使用 CLLocationManager
委托方法来更新地图视图。
只需将地图上的 userTrackingMode
设置为 .followWithHeading
,地图视图就会为您完成这项工作。一旦用户与地图交互,跟踪模式将更改为 .none
。
您可以将按钮添加到 re-activate .followWithHeading
用户跟踪模式。
这就是我最终组合在一起的东西,而且效果很好。
func centerViewOnUserLocation() { mapView.setUserTrackingMode(.followWithHeading, animated:true)}
我将地图设置为居中并旋转到用户的位置和方向,但地图视图被锁定,因为我无法与其交互。
extension MapScreen: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else { return }
let region = MKCoordinateRegion.init(center: location.coordinate, latitudinalMeters: regionInMeters, longitudinalMeters: regionInMeters)
mapView.setRegion(region, animated: true)
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
checkLocationAuthorization()
func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
mapView.camera.heading = newHeading.magneticHeading
mapView.setCamera(mapView.camera, animated: true)
}
}
}
}
我如何让用户探索周围的环境?滚动、缩放、与图钉交互等,同时向用户居中和旋转?
通过使用 didUpdateLocations
委托方法,您可以不断更新地图视图,覆盖用户所做的任何更改。
解决方案是不使用 CLLocationManager
委托方法来更新地图视图。
只需将地图上的 userTrackingMode
设置为 .followWithHeading
,地图视图就会为您完成这项工作。一旦用户与地图交互,跟踪模式将更改为 .none
。
您可以将按钮添加到 re-activate .followWithHeading
用户跟踪模式。
这就是我最终组合在一起的东西,而且效果很好。
func centerViewOnUserLocation() { mapView.setUserTrackingMode(.followWithHeading, animated:true)}