Центр MKCoordinateRegion изменяется при изменении диапазона — iphone

#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 . Проблема здесь заключалась в копировании-вставке везде 🙂