MKCoordinateregion центр меняется при изменении диапазона - iphone

У меня есть MKCoordinateregion под названием регион. Я хочу изменить диапазон этого региона, не меняя его центр. Я использую следующий метод для изменения масштаба.

 -(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

Этот метод устанавливает диапазон точно, как хотелось бы. Но я не хочу никаких изменений в координате центра, потому что, когда я уменьшаю, а затем уменьшаю масштаб, я оказываюсь в месте, отличном от исходного положения.

Есть ли какой-нибудь метод, позволяющий увеличивать и уменьшать масштаб без каких-либо изменений в центре?

Спасибо за любую помощь заранее.

2 ответа

Решение

Ваши координаты до и после центра практически одинаковы, поэтому проблем не должно быть. Если вы действительно хотите точно такие же координаты центра, позвоните setCenterCoordinate:animated: сразу после использования setRegion:animated: и передать некоторые сохраненные координаты центра.

CLLocationCoordinate2D originalCenter = mymap.centerCoordinate;
// ... adjust region
[mymap setCenterCoordinate:originalCenter animated:NO];

Кроме того, вы должны использовать YES вместо TRUE для логических значений:

[mymap setRegion:region animated:YES];

Вам необходимо настроить регион карты, чтобы соотношение сторон соответствовало размеру кадра вида карты.

Как только регион с желаемым центром рассчитан, отрегулируйте регион как,

MKCoordinateRegion adjustedRegion = [mymap regionThatFits:region];
[mymap setRegion:adjustedRegion animated:TRUE];

Смотрите документы.

Другие вопросы по тегам