1

我正在尝试将所有注释都放在我的身上,MKMapView同时将当前用户位置保持在地图的中心。

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

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

参考:

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

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

4

1 回答 1

2

我发现这个解决方案是最可靠的,@Anna 也提出了建议,所以它可能是一个不错的解决方案。

这是我的方法(实现为我继承的方法MKMapView

- (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];
}
于 2014-10-18T12:59:54.120 回答