Frage

Ich bin verwirrt.Ich habe eine MKMapView und in der viewDidLoad Methode mache ich:

- (void)viewDidLoad {
    mainDelegate = (PublicArtOmahaAppDelegate*)[[UIApplication sharedApplication]delegate]; 

    XMLController  *myXMLController = [[XMLController alloc] init]; 
    [myXMLController parse];
    mapView.showsUserLocation = YES;
    [self gotoLocation];

    // add annotations to map
    [self.mapView addAnnotations:mainDelegate.mapAnnotations];
    [myXMLController release];
}

[selbst gotoLocation] Anrufe:

- (void)gotoLocation
{
    MKCoordinateRegion newRegion;

    CLLocation *userLocation = mapView.userLocation.location;
    float latitude = userLocation.coordinate.latitude;
    float longitude = userLocation.coordinate.latitude;
    newRegion.center.latitude = latitude;
    newRegion.center.longitude = longitude;

    [self.mapView setRegion:newRegion animated:YES];
}

Daher dachte ich, dies sollte die Karte beim Laden der Kartenansicht auf den Standort des Benutzers zentrieren, und ich plante auch, eine Schaltfläche auf dem Bildschirm zu implementieren, die gotoLocation manuell erneut aufruft, um den Standort des Benutzers zu aktualisieren, wenn er möchte.

Aber...wenn ich die App auf einem Gerät starte, lädt sie die Karte zentriert in einem Stück Ozean westlich von Afrika, das anscheinend lat und long 0,0 ist.Was ich seltsam fand, war, dass beim Zurückzoomen zu meinem tatsächlichen Standort mein Standort korrekt als Anmerkung platziert wurde.Ich denke, es stimmt etwas nicht damit, wie ich den Benutzerstandort in der gotoLocation einstelle?Merkt jemand, was ich falsch mache?

War es hilfreich?

Lösung

Von der MKUserLocation Dokumentation:

Lage

Der aktuelle Standort des Geräts.(schreibgesch)

@property (readonly, nonatomic) CLLocation *location

Diskussion

Diese Eigenschaft enthält nil, wenn die Kartenansicht den Benutzerstandort derzeit nicht anzeigt oder wenn der Standort des Benutzers noch nicht ermittelt wurde.

Es dauert einige Sekunden, bis MKMapView (oder CLLocationManager ) eine Korrektur für den Standort des Benutzers erhält, und es kann einige Versuche dauern, um eine relativ genaue Korrektur zu erhalten.Ihre beste Wette ist wahrscheinlich, eine zu erstellen CLLocationManager objekt, weisen Sie ihm einen Delegaten zu und zoomen Sie dann die Karte, wenn die locationManager:didUpdateToLocation:fromLocation: methode wird ausgelöst.

Andere Tipps

Sie sollten das einstellen span auch für die Region.Setzen Sie es auf einen beliebigen Wert, wie zum Beispiel latitudeDelta = 0.01 (und das gleiche für latitudeDelta).

Rufen Sie auch an gotoLocation von innen – locationManager:didUpdateToLocation:fromLocation: (wenn Sie einen Standortmanager verwenden).Auf diese Weise rufen Sie es nur an, wenn Sie einen gültigen Benutzerstandort haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top