mapView не масштабируется при второй попытке с помощью didUpdateUserLocation - PullRequest
2 голосов
/ 02 июня 2011

Я загружаю контроллер вида карты, когда кнопка просмотра карты нажата на моем главном контроллере:

- (IBAction)mapButton:(id)sender {
    MapKitDisplayViewController *mapKitDisplayView = [[MapKitDisplayViewController alloc] init];
    [self presentModalViewController:mapKitDisplayView animated:YES];   
    [mapKitDisplayView release]; mapKitDisplayView = nil;
}

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

- (void)mapView:(MKMapView *)myMapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    myMapView.showsUserLocation = YES;
    NSLog(@"didUpdateUserLocation = '%@'", userLocation);

    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([userLocation coordinate], 20000, 20000);
    [myMapView setRegion:region animated:YES];
}

У меня есть кнопка «Готово» на этом экране, которая отклоняет это представление:

- (IBAction)mapDoneButton:(id)sender 
{    
    [self dismissModalViewControllerAnimated:YES];
}

На этом этапе пользователь возвращается к контроллеру основного вида, однако, когда я снова нажимаю кнопку карты вида, метод didUpdateUserLocation никогда не вызывается! Следовательно, вид карты уменьшен до стандартного и не будет увеличиваться, как раньше.

Как я могу заставить его быть вызванным снова?

спасибо

Ответы [ 2 ]

6 голосов
/ 02 июня 2011

MKMapView объект не запускает обновление местоположения пользователя самостоятельно.Вам необходимо активировать поиск, установив showsUserLocation = YES.Затем будет получено местоположение пользователя, а затем вызван метод делегата mapView:didUpdateUserLocation:.Так что установите это значение на YES на viewWillAppear:, и как только вы определите местоположение пользователя, вы можете установить его на NO, чтобы остановить отслеживание пользователя.Если вы этого не сделаете, он периодически обновляет местоположение пользователя и вызывает метод делегата.Без этого местоположение пользователя должно быть ненадежным.

1 голос
/ 02 июня 2011

Что я делаю дальше:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
[[NSNotificationCenter defaultCenter] postNotificationName:@"gotUserLocation" object:self];}

тогда в viewDidLoad доступна проверка местоположения пользователя. если он не зарегистрирован контроллер представления как получатель для этого уведомления:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(zoomToLocation) name:@"gotUserLocation" object:nil];

если доступно местоположение пользователя, просто вызовите метод zoomToLocation

...