Расположение пользователя Mapkit ViewDidLoad
Таким образом, из нескольких ответов, которые я вижу здесь, это как центрировать и увеличить местоположение пользователя, когда приложение загружается, и оно прекрасно работает.
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
NSLog(@"Did update user location");
MKCoordinateRegion mapRegion;
mapRegion.center = mapView.userLocation.coordinate;
mapRegion.span.latitudeDelta = 0.2;
mapRegion.span.longitudeDelta = 0.2;
[map setRegion:mapRegion animated: YES];
}
Но когда вы начинаете играть с картой каждый раз, когда вызывается этот метод делегата, он возвращает меня к местоположению пользователя. Как мне справиться с этим, если я остановлю обновления местоположения пользователя? Я пытался поставить этот код в поле зрения, загрузился ли я, чтобы получить начальный масштаб и центр, но это не работает? Или, может быть, я могу поместить код в другой метод делегата набора карт, в котором я просто не знаю, как это сделать. Как все остальные делают это?
1 ответ
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
Метод делегата mapKit, вызываемый каждый раз, когда изменяется местоположение пользователя. Именно поэтому ваша карта будет сосредоточена на местоположении пользователя при каждом вызове. Вы не можете использовать это для инициализации карты на месте пользователя при запуске приложения.
Я думаю, что если он не работает с viewDidLoad, это потому, что в то время местоположение пользователя еще не известно приложению. Поставьте точку останова там и убедитесь сами.
Для меня вы должны добавить наблюдателя в viewDidLoad, который вызывается, когда приложение получает данные о местоположении пользователя
// Check if user authorized use of location services
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized) {
// Add observer
[self.mapView.userLocation addObserver:self
forKeyPath:@"location"
options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)
context:NULL];
}
Затем в
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context;
Подождите, пока keyPath "location" будет вызван. Когда он запускается в первый раз, представление загружается, и приложение знает местоположение пользователя. Затем вы можете поместить свой код в центр карты на позиции пользователя. Но затем обязательно удалите наблюдателя, чтобы он не принимал вызов более одного раза.
[self.mapView.userLocation removeObserver:self
forKeyPath:@"location" context:NULL];