Краткая информация о том, что у меня происходит. UIMapView загружает и показывает одну аннотацию (не более одного). В строке меню есть кнопка "Найти меня", нажмите "userLocation" и вы увидите ее как вторую аннотацию. Затем я убираю MapView, чтобы соответствовать обоим аннотациям в диапазоне, но я не могу найти подходящий способ сделать это. В зависимости от того, где первая аннотация размещена в зависимости от местоположения пользователя, иногда она не уменьшает масштаб.
Например, если аннотация находится на северо-западе пользователя, она отлично масштабируется. Но если аннотация находится на юго-востоке пользователя, она просто масштабируется настолько, что их просто обрезают, и вам придется вручную уменьшить масштаб. Вот код, который я использую, вариация некоторых других, которые я нашел на SO.
CLLocation *whereIAm = mapView.userLocation.location;
float lat = whereIAm.coordinate.latitude;
float lon = whereIAm.coordinate.longitude;
CLLocationCoordinate2D southWest = {[currentLatitude floatValue], [currentLongitude floatValue]};
CLLocationCoordinate2D northEast = southWest;
southWest.latitude = MIN(southWest.latitude, lat);
southWest.longitude = MIN(southWest.longitude, lon);
northEast.latitude = MAX(northEast.latitude, lat);
northEast.longitude = MAX(northEast.longitude, lon);
CLLocation *locSouthWest = [[CLLocation alloc] initWithLatitude:southWest.latitude longitude:southWest.longitude];
CLLocation *locNorthEast = [[CLLocation alloc] initWithLatitude:northEast.latitude longitude:northEast.longitude];
CLLocationDistance meters = [locSouthWest distanceFromLocation:locNorthEast];
MKCoordinateRegion region;
region.center.latitude = (southWest.latitude + northEast.latitude) / 2.0;
region.center.longitude = (southWest.longitude + northEast.longitude) / 2.0;
region.span.latitudeDelta = meters / 111319.5
region.span.longitudeDelta = 7.0;
MKCoordinateRegion savedRegion = [mapView regionThatFits:region];
[mapView setRegion:savedRegion animated:YES];
[locSouthWest release];
[locNorthEast release];
Есть ли лучший способ, встроенный в MapKit, просто уменьшить масштаб, чтобы обе аннотации имели, скажем, половину дюйма между ними во внешнем кадре? Меня не волнует, если пользователь должен увеличивать масштаб после, я просто хочу, чтобы он правильно уменьшал изображение.