#iphone #mkmapview #mkcoordinateregion
#iPhone #mkmapview #mkcoordinateregion
Вопрос:
У меня есть MKCoordinateRegion под названием region. Я хочу изменить диапазон этого региона, не меняя его центр. Я использую следующий метод для изменения масштаба.
-(void) changeZoom
{
NSLog(@"before zoom span, center are %f, %f,%f,%f", region.span.latitudeDelta, region.span.longitudeDelta, mymap.centerCoordinate.latitude, mymap.centerCoordinate.longitude);
region.span.latitudeDelta = current_factor ;
region.span.longitudeDelta = current_factor ;
region.center.latitude = mymap.centerCoordinate.latitude ;
region.center.longitude = mymap.centerCoordinate.longitude ;
[mymap setRegion:region animated:TRUE];
NSLog(@"after zoom span, center are %f, %f,%f,%f", region.span.latitudeDelta, region.span.longitudeDelta, mymap.centerCoordinate.latitude, mymap.centerCoordinate.longitude);
}
Журнал показывает :
before zoom span, center are 0.021950, 0.021950,19.068080,72.838111
after zoom span, center are 0.043901, 0.043901,19.068040,72.838154
Этот метод точно устанавливает диапазон по желанию.Но я не хочу никаких изменений в координатах центра, потому что, когда я уменьшаю масштаб, а затем уменьшаю масштаб, я оказываюсь в месте, отличном от начального местоположения.
Существует ли какой-либо метод, позволяющий увеличивать и уменьшать масштаб без каких-либо изменений в центре?
Заранее спасибо за любую помощь.
Ответ №1:
Ваши координаты центра до и после почти точно совпадают, поэтому это не должно быть проблемой. Если вам действительно нужны точно такие же координаты центра, позвоните setCenterCoordinate:animated:
сразу после использования setRegion:animated:
и передайте некоторые сохраненные координаты центра.
CLLocationCoordinate2D originalCenter = mymap.centerCoordinate;
// ... adjust region
[mymap setCenterCoordinate:originalCenter animated:NO];
Кроме того, вы должны использовать YES
вместо TRUE
для логических значений:
[mymap setRegion:region animated:YES];
Ответ №2:
Вам необходимо настроить область карты, чтобы убедиться, что соотношение сторон соответствует размеру кадра вида карты.
После вычисления области с нужным центром настройте область следующим образом,
MKCoordinateRegion adjustedRegion = [mymap regionThatFits:region];
[mymap setRegion:adjustedRegion animated:TRUE];
Смотрите Документы.
Комментарии:
1. Я не смог найти метод adjustRegion: для MKMapView. вы использовали этот метод?
2. О, я использовал
adjustRegion
. Прошу прощения — этоregionThatFits
. Проблема здесь заключалась в копировании-вставке везде 🙂