在保持用户位置居中的同时在MKMapView上拟合注解

我试图把所有的注释都放在我的MKMapView同时保持当前用户在地图中心的位置。

关于如何缩小地图以适应地图上的注释,已经有很多参考文献[1] [2],但是它们将调整当前的中心位置,例如,如果所有注释位于我当前用户位置的东边,它将进行调整,当前用户位置移动到地图左侧。

如何缩放我的地图,使其适合显示的所有注释,但用户的当前位置保留在地图的中心位置?

参考文献:

[1] 缩放MKMapView以适应注释引脚?

[2] - (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated NS_AVAILABLE(10_9, 7_0);

我发现这个解决scheme是最可靠的,@Anna也提出这个解决scheme,所以这可能是一个好的解决scheme。

这是我的方法(作为我的inheritanceMKMapView的方法实现

 - (void)fitAnnotationsKeepingCenter { CLLocation *centerLocation = [[CLLocation alloc] initWithLatitude:self.centerCoordinate.latitude longitude:self.centerCoordinate.longitude]; // starting distance (do not zoom less than this) CLLocationDistance maxDistance = 350; for (id <MKAnnotation> vehicleAnnotation in [self annotations]) { CLLocation *annotationLocation = [[CLLocation alloc] initWithLatitude:vehicleAnnotation.coordinate.latitude longitude:vehicleAnnotation.coordinate.longitude]; maxDistance = MAX(maxDistance, [centerLocation distanceFromLocation:annotationLocation]); } MKCoordinateRegion fittedRegion = MKCoordinateRegionMakeWithDistance(centerLocation.coordinate, maxDistance * 2, maxDistance * 2); fittedRegion = [self regionThatFits:fittedRegion]; fittedRegion.span.latitudeDelta *= 1.2; fittedRegion.span.longitudeDelta *= 1.2; [self setRegion:fittedRegion animated:YES]; }