Я хотел бы постоянно обновлять свой пользовательский интерфейс в соответствии с MKMapView, когда пользователь масштабирует или прокручивает карту. (Это работает нормально не только после окончания прокрутки.)
Я попробовал метод делегата mapView:regionWillChangeAnimated:, который, согласно документации, «вызывается всякий раз, когда изменяется отображаемый в данный момент регион карты. Во время прокрутки этот метод может вызываться много раз, чтобы сообщать об обновлениях позиции на карте». https://developer.apple.com/documentation/mapkit/mkmapviewdelegate
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
[self updateUIAcordingToMapViewRegionChange];
}
Но, к сожалению, это не работает, потому что документация, похоже, не соответствует действительности. Метод вызывается только один раз в самом начале изменения региона. Во время прокрутки, когда палец опущен и перемещается, метод никогда не вызывается снова.
Единственный пост об этой проблеме, который мне удалось найти, принадлежит участнику macrumors namanhams: http://forums.macrumors.com/showthread.php?t=1225172 Но никто не придумал никаких идей...
В качестве обходного пути я попытался установить таймер в regionWillChange (и сделать его недействительным в regionDidChange):
- (void)handleRegionChange:(NSTimer*)timer
{
[self updateUIAcordingToMapViewRegionChange];
}
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
self.mapRegionIsChangingTimer = [NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(handleRegionChange:)
userInfo:nil
repeats:YES];
}
Но и это не работает. Все вызовы методов из таймера выполняются сразу после окончания прокрутки.Похоже, прокрутка mapView блокирует основной поток или что-то в этом роде…
Я также читал этот пост на stackoverflow, но, к сожалению, не совсем его понял: Отслеживание событий перерисовки MKMapView Поэтому, если решение моей проблемы действительно лежит в этом SO-потоке, скажите мне об этом, и я попытаюсь вникнуть в его детали.
Я все еще надеюсь, что я просто слишком глуп или слишком слеп, чтобы найти правильный метод делегирования, и очень ценю любые подсказки, обходные пути и лучшие практики для отслеживания регионов MKMapView.