使地图缩放到用户位置和注释(swift 2)

我正在使用mapkit。 我想让地图缩放以显示用户的位置和注释点,而不是缩放到用户的当前位置。

目前我有:

let annotation = MKPointAnnotation() annotation.coordinate = CLLocationCoordinate2DMake(mapLat, mapLon) annotation.title = mapTitle self.map.addAnnotation(annotation) func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let userLoction: CLLocation = locations[0] let latitude = userLoction.coordinate.latitude let longitude = userLoction.coordinate.longitude let latDelta: CLLocationDegrees = 0.05 let lonDelta: CLLocationDegrees = 0.05 let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span) self.map.setRegion(region, animated: true) self.map.showsUserLocation = true } 

它只是放大到用户的位置,并locking在该位置。 当我尝试滚动时,它只是跳回到用户的位置。 我究竟做错了什么? 如何让用户在地图上缩放或移动,而不会跳回到当前位置?

我试图放大显示注释和用户在同一视图上的位置。 即使注释很远,我想要缩放以显示用户和注释。

它只是跳回到用户的位置,因为didUpdateLocations方法被调用很多次。 有两个解决scheme。

1)使用requestLocation

如果使用requestLocation方法而不是startUpdatingLocationdidUpdateLocations调用一次didUpdateLocations方法

 if #available(iOS 9.0, *) { locationManager.requestLocation() } else { // Fallback on earlier versions } func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let userLoction: CLLocation = locations[0] let latitude = userLoction.coordinate.latitude let longitude = userLoction.coordinate.longitude let latDelta: CLLocationDegrees = 0.05 let lonDelta: CLLocationDegrees = 0.05 let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span) self.map.setRegion(region, animated: true) self.map.showsUserLocation = true } 

2)使用标志

 var isInitialized = false func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { if !isInitialized { // Here is called only once isInitialized = true let userLoction: CLLocation = locations[0] let latitude = userLoction.coordinate.latitude let longitude = userLoction.coordinate.longitude let latDelta: CLLocationDegrees = 0.05 let lonDelta: CLLocationDegrees = 0.05 let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span) self.map.setRegion(region, animated: true) self.map.showsUserLocation = true } }