MKMapView AGRANDIR L'Localisation de l'utilisateur Une fois mais pas la deuxième fois dans l'App Tab-Bar (iOS)

StackOverflow https://stackoverflow.com/questions/8347607

Question

J'ai un MKMapView dans le cadre d'un contrôleur de navigation dans une application à base de la barre d'onglets.

Je clique sur un UIButton le premier View Controller et il pousse à la deuxième View Controller qui contient le MKMapView. Lorsque la carte Voir les charges, il effectue un zoom avant sur l'emplacement de l'utilisateur à l'aide:

- (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];
    }
}

Quand je frappe le bouton de retour sur le contrôleur de navigation au-dessus du MapView puis cliquez sur Retour à la carte, elle ne zoome sur l'emplacement actuel de l'utilisateur, mais juste a le zoom complet sur défaut:

Voici une photo de la vue la deuxième fois.

Je figure cela fonctionnerait correctement si je pouvais faire appeler la didUpdateUserLocation dans la méthode viewDidAppear mais je ne suis pas sûr de savoir comment retirer ceci depuis le didUpdateUserLocation est une méthode déléguée.

Est-ce la bonne approche ou est-il une autre approche que je devrais prendre pour le faire? Merci!

P.S. Je l'ai vu cette question, mais il est un peu différent avec son utilisation d'un contrôleur vue modal

Était-ce utile?

La solution

Je retirerait tout le code de zoom dans sa propre méthode qui peut être messaged de -viewDidAppear: et -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];
}

Ensuite, dans -viewDidAppear: ...

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

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

Et dans la méthode délégué -mapView:didUpdateToUserLocation: ...

- (void)mapView:(MKMapView *)theMapView didUpdateToUserLocation:(MKUserLocation *)location
{
    [self zoomToUserLocation:location];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top