iPhone MkMapView заблокировать центр для пользователя
У меня есть MkMapView, и я хочу, чтобы карта была в центре местоположения пользователя, точно так же, как приложение карты iPhone при нажатии кнопки области.
Я использую метод setCenterCoordinate, потому что мне не нужно устанавливать масштаб. Я использую его каждый раз, когда местоположение обновляется из менеджера местоположения.
Проблема состоит в том, что, поскольку он обновляется каждые полсекунды (приблизительно), этот метод "setCenterCoordinate" вызывается все время, и приложение становится "зависшим". Если мне нужно переключиться на вкладку вдали от вида карты, я должен продолжать нажимать другую вкладку, чтобы сделать это.
Что ж, весь этот текст просто для того, чтобы спросить, есть ли правильный способ заставить MkMapView установить свой центр в соответствии с местоположением пользователя (синяя точка).
Спасибо
2 ответа
Я уже описал лучший способ получения обновлений userLocation.location
собственностью MKMapView
через уведомления KVO вместо использования другого менеджера местоположения. Как мне увеличить MKMapView до текущего местоположения пользователя без CLLocationManager?
Конечно, вы должны внести некоторые изменения в метод получения уведомлений KVO. Что-то вроде того:
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([self.mapView isUserLocationVisible]) {
[self.mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate
animated:YES];
}
}
Я проверил этот код, и он отлично работает.
В дополнение к ответу ddnv:
Никогда не забывайте останавливать наблюдателя с помощью метода ViewWillDisappear (или viewDidUnload в В противном случае ваше приложение будет сильно зависать. [self.mapView.userLocation removeObserver:self forKeyPath:@"location"];