5 Stimmen

MKMapView und setRegion:animated: keine Aktualisierung der Kartendarstellung

Grüße! Ich versuche zu verwenden MKMapView ohne Apple-Code-Beispiele, obwohl es ein paar andere mit unterschiedlicher Klarheit gibt. (Ich weiß, "Lies das freundliche Handbuch". Ich habe das getan, aber es ist nicht 100% klar, so bitte mit mir auf dieser einen.)

Die Situation ist wie folgt. Ich habe eine MKMapView Objekt, in das ich eine Reihe von etwa zehn MKPinAnnotation Objekte. So weit, so gut. Alles wird vernünftig zugewiesen/freigegeben und es scheint keine Beschwerden von Instruments zu geben.

Bei der ersten Anzeige habe ich eine MKKoordinatenRegion Objekt mit dem Mittelpunkt an unserer ersten Stiftposition und einer (willkürlichen) Spanne von 0,2 x 0,2. Ich rufe dann auf:

[mapView setRegion:region animated:YES];
[mapView regionThatFits:region];

Wahnsinn! Das hat gut funktioniert.

Inzwischen ... Ich habe auch eine segmentierte Steuerung für die Bewegung zu jedem Pin Position zu ermöglichen. Also, wie ich durch die Liste tippen, animiert die Karte zu jedem neuen Pin Position mit einem neuen Paar von Aufrufen zu setRegion:animiert: y regionThatFits: ... oder zumindest ist das die Idee.

Die Karte "reist" zwar zum neuen Standort der Stecknadel, aber die Karte selbst wird nicht darunter aktualisiert. Stattdessen sehe ich meine Stecknadel auf einem grauen/leeren Kartenhintergrund ... bis Ich stoße die Karte in eine beliebige Richtung, wenn auch nur leicht. Dann kommt die Karte durch! (Wenn ich mich nur in einer kurzen Entfernung von der vorherigen Position der Stecknadel bewege, sehe ich normalerweise den Teil der Karte, der bereits geladen war).

Ich vermute, ich tue etwas dumm hier, aber ich habe nicht in der Lage gewesen, herauszufinden, was, zumindest nicht von der MapKit docs. Vielleicht verwende ich die falschen Aufrufe? (Nun, ich muss die Region mindestens einmal festlegen, ja? Verschieben, dass um scheint nicht zu helfen, obwohl.) Ich habe auch versucht, mit setCenterCoordinate:animiert: - dasselbe Problem.

Ich gehe zu diesem Zeitpunkt von nichts aus (kein Wortspiel beabsichtigt). Ich versuche nur, meinen Weg zu finden.

Hinweise sind willkommen und erwünscht!

UPDATE: Anrufe setRegion:animiert: y regionThatFits: das erste Mal, gefolgt von setCenterCoordinate:animiert: während des Durchlaufs der Liste, hat keine Wirkung. Interessante Erkenntnis: Wenn ich in beiden Fällen animiert auf NEIN stelle, wird die Karte aktualisiert!!! Nur wenn sie auf YES gesetzt ist. (Was ist passiert? Ist animated: kaputt? Das kann nicht sein ... ???)

7voto

Joe D'Andrea Punkte 5121

Es hat sich herausgestellt, dass die Kartenaktualisierung bei Verwendung des SIMULATORs nicht funktioniert. Wenn ich versuche setCenterCoordinate:animiert: auf dem Gerät, I tun erhalten Sie die Kartenaktualisierung darunter.

Unterm Strich: Ich hatte mich darauf verlassen, dass der Simulator in Bezug auf die Kartenaktualisierung mit dem Gerät übereinstimmen würde. Leider habe ich mich geirrt! Lektion gelernt. "Lass das nicht mit dir passieren." :)

2voto

yonel Punkte 7835

Sie müssen die Funktion setRegion:animated: Aufruf im Kontext des Hauptthreads. Machen Sie einfach etwas wie:

....
[self performSelectorOnMainThread:@selector(updateMyMap) withObject:nil waitUntilDone:NO];

}

-(void) updateMyMap {
    [myMap setRegion:myRegion animated:YES];    
}

und es sollte in jedem Fall funktionieren (animiert oder nicht), mit der Karte darunter aktualisiert.

0voto

yonel Punkte 7835

Seltsames Brummen. Die Karte wird auf meinem Mac sogar im Simulator aktualisiert. Vielleicht eine Netzwerk-Einstellung (Proxy oder was auch immer), die das Karten-Widget zu verhindern, um die Kacheln auf dem Simulator herunterladen würde?

0voto

Andrew Winter Punkte 1076

Obwohl dies ein altes Thema ist, dachte ich, ich würde mich mit meinen Erfahrungen einmischen. Es scheint, dass die Kartenanimation nur auf Geräten mit iOS 3.1.x und dem Simulator mit 3.1.x fehlschlägt. Mein dev iPod touch mit 3.1.3 kann nicht zoomen, wenn die Animation aktiviert ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X