MKMapView Увеличивает местоположение пользователя один раз, но не второй раз в приложении панели вкладок (iOS)

У меня есть MKMapView как часть контроллера навигации в приложении на основе панели вкладок.

Я нажимаю кнопку UIB на первом контроллере вида, и он выдвигается ко второму контроллеру вида, который содержит MKMapView. Когда представление карты загружается, оно увеличивает местоположение пользователя, используя:

- (void)mapView:(MKMapView *)theMapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    if ( !initialLocation )
    {
        self.initialLocation = userLocation.location;

        MKCoordinateRegion region;
        region.center = theMapView.userLocation.coordinate;
        region.span = MKCoordinateSpanMake(2.0, 2.0);
        region = [theMapView regionThatFits:region];
        [theMapView setRegion:region animated:YES];
    }
}

Когда я нажимаю кнопку "Назад" на контроллере навигации над MapView, а затем нажимаю кнопку "Назад" на карте, он больше не увеличивает текущее местоположение пользователя, а просто имеет значение полного уменьшения по умолчанию:

Вот картинка с видом во второй раз.

Я полагаю, что это будет работать правильно, если бы я мог как-то вызвать didUpdateUserLocation в методе viewDidAppear, но я не уверен, как это осуществить, так как didUpdateUserLocation является методом делегата.

Это правильный подход или есть другой подход, который я должен использовать для этого? Спасибо!

PS Я видел этот вопрос, но он немного отличается с использованием контроллера модального представления

1 ответ

Решение

Я хотел бы вытащить весь код масштабирования в свой собственный метод, который может быть отправлен из -viewDidAppear: а также -mapView:didUpdateToUserLocation:,

- (void)zoomToUserLocation:(MKUserLocation *)userLocation
{
    if (!userLocation)
        return;

    MKCoordinateRegion region;
    region.center = userLocation.location.coordinate;
    region.span = MKCoordinateSpanMake(2.0, 2.0); //Zoom distance
    region = [self.mapView regionThatFits:region];
    [self.mapView setRegion:region animated:YES];
}

Затем в -viewDidAppear:...

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [self zoomToUserLocation:self.mapView.userLocation];
}

И в -mapView:didUpdateToUserLocation: метод делегата...

- (void)mapView:(MKMapView *)theMapView didUpdateToUserLocation:(MKUserLocation *)location
{
    [self zoomToUserLocation:location];
}
Другие вопросы по тегам