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 に答える