Luogo d'uso MKMapView ingrandimento di una volta, ma non la seconda volta nella Tab-Bar App (iOS)

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

Domanda

Ho un MKMapView come parte di un controller di navigazione in un'applicazione basata Tab Bar.

I clic su un UIButton sul primo View Controller e spinge alla seconda View Controller che contiene il MKMapView. Quando i Mappa carichi, si ingrandisce in sulla posizione dell'utente utilizzando:

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

Quando mi ha colpito il pulsante indietro sul controller di navigazione in alto il MapView e quindi fare clic di nuovo per la mappa, si zoom non è più in sulla posizione corrente dell'utente, ma appena ha lo zoom completo timeout predefinito:

Ecco una foto della vista per la seconda volta.

Immagino che avrebbe funzionato correttamente se potessi in qualche modo chiamare il didUpdateUserLocation nel metodo viewDidAppear, ma non sono sicuro di come tirare fuori questo dato che il didUpdateUserLocation è un metodo delegato.

E 'questo l'approccio giusto o c'è un approccio diverso dovrei prendere per fare questo? Grazie!

P.S. Ho visto questa domanda, ma è un po 'diverso con è di uso di un controller di vista modale

È stato utile?

Soluzione

I tirerebbe tutto il codice lo zoom in un proprio metodo che può essere messaged da -viewDidAppear: e -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];
}

Poi nel -viewDidAppear: ...

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

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

E nel metodo -mapView:didUpdateToUserLocation: delegato ...

- (void)mapView:(MKMapView *)theMapView didUpdateToUserLocation:(MKUserLocation *)location
{
    [self zoomToUserLocation:location];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top