MKMAPVIEW Zooming am Standort des Benutzers einmal, jedoch nicht beim zweiten Mal in der Registerkarte (iOS)

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

Frage

Ich habe ein MkMapView als Teil eines Navigationscontrollers in einer Tab -Balken -basierte App.

Ich klicke auf einen Uibutton im ersten Ansichtscontroller und drückt zum zweiten Ansichtsregler, der die mkmapview enthält. Wenn die Kartenansicht geladen wird, wird der Speicherort des Benutzers mit:

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

Wenn ich auf dem Navigationscontroller über der MapView auf die Back -Taste klicke und dann zurück zur Karte klicken, wird nicht mehr im aktuellen Standort des Benutzers eingebaut, sondern nur den vollen Zoom -Standard: Standard:

Hier ist ein Bild der Ansicht beim zweiten Mal.

Ich denke, es würde korrekt funktionieren, wenn ich die didupdateuserLocation in der ViewDidAppear -Methode irgendwie aufrufen könnte, aber ich bin mir nicht sicher, wie ich das ausziehen soll, da die DidupdateuserLocation eine Delegate -Methode ist.

Ist das der richtige Ansatz oder gibt es einen anderen Ansatz, den ich dazu verfolgen sollte, dies zu tun? Vielen Dank!

Ps Ich habe diese Frage gesehen, aber sie unterscheidet sich bei der Verwendung eines Modal View Controllers leicht

War es hilfreich?

Lösung

Ich würde den gesamten Zoomcode in eine eigene Methode ziehen, aus der ausgeschrieben werden kann -viewDidAppear: und -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];
}

Dann in -viewDidAppear:...

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

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

Und in der -mapView:didUpdateToUserLocation: Delegiermethode ...

- (void)mapView:(MKMapView *)theMapView didUpdateToUserLocation:(MKUserLocation *)location
{
    [self zoomToUserLocation:location];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top