Краткая справка о том, что у меня происходит. UIMapView загружает и показывает одну аннотацию (никогда не более одной). В строке меню есть кнопка «Найти меня», при нажатии на которую пользовательское местоположение обнаруживается и отображается как вторая аннотация. Затем я уменьшаю масштаб 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, чтобы просто уменьшить масштаб так, чтобы обе аннотации имели, скажем, полдюйма между ними во внешней рамке? Я не На самом деле меня не волнует, придется ли пользователю увеличивать масштаб после этого, я просто хочу, чтобы он уменьшился правильно.