MKMapView setRegion не является постоянным

Я устанавливаю свой регион MKMapView внутри viewWillAppear:, чтобы карта отображала правильный регион, как только пользователь его увидит:

[mapView setRegion:region animated:NO];

В первый раз, когда я это делаю, я обрезаю область следующим образом:

альтернативный текст

Затем, когда я устанавливаю тот же самый регион, я получаю что-то вроде этого:

альтернативный текст

Второй скриншот — это то, что я хочу получить с самого начала. Я предполагаю, что в первый раз, когда я устанавливаю регион, карта не полностью загружена или что-то в этом роде. Любой указатель того, что я должен сделать, чтобы исправить это?

EDIT: Это, вероятно, связано: добавление аннотации к mapView до первого вызова viewDidAppear также не работает. PinView просто не отображается. Как я могу убедиться, что вид карты готов к использованию в viewWillAppear?


person samvermette    schedule 19.11.2010    source источник


Ответы (3)


Некоторое время назад сообщалось о проблемах, связанных с методом setRegion, я не знаю, были ли они исправлены с тех пор. Взгляните на следующий пост на форумах разработчиков Apple:

https://devforums.apple.com/message/57488

person Olivier    schedule 19.11.2010
comment
хороший указатель. Эта ошибка странного поведения setRegion может быть моей проблемой. Но так и не нашел исправления :( - person samvermette; 19.11.2010

Я наткнулся на эту тему который предложил добавить задержку к вызову setRegion: (если вам все равно нужно вызывать его в методе viewWillAppear). Немного глупо, но это работает.

- (void)viewWillAppear:(BOOL)animated {
    [self performSelector:@selector(centerMap:) withObject:nil afterDelay:0.01];
}

Мне действительно любопытно, чего не хватает mapView для правильного центрирования без этой задержки.

person samvermette    schedule 19.11.2010

Вы пытались сделать вызов из MKMapViewDelegate сообщение mapViewDidFinishLoadingMap? Возможно, это достаточно поздно, чтобы правильно определить регион?

person RedBlueThing    schedule 19.11.2010
comment
размещение вызова в mapViewDidFinishLoadingMap эквивалентно включению в viewDidAppear (в котором он работает каждый раз). Я хочу, чтобы регион уже был установлен, когда представление отображается пользователю. - person samvermette; 19.11.2010
comment
Я добавил свой код setRegion в этот метод, но метод не вызывается. Я думал, он вызывается автоматически? - person marciokoko; 12.12.2012