MKMapView Увеличивает местоположение пользователя один раз, но не второй раз в приложении панели вкладок (iOS) - PullRequest
3 голосов
/ 02 декабря 2011

У меня есть 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];
    }
}

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

Вот изображение вида во второй раз.

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

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

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

1 Ответ

11 голосов
/ 02 декабря 2011

Я бы вытащил весь код масштабирования в свой собственный метод, который можно передать из -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];
}
...