2011-01-12 3 views
1

Ich arbeite mit einem NSMutableArray von Objekten, die dem MKAnnotation Protokoll entsprechen. Meine Frage ist im Laufe der Zeit neue Objekte zum Array hinzugefügt werden, kann mir jemand sagen, was die bevorzugte Methode für die Aktualisierung der Anmerkungen in der MapView ist. Sollte ich alle Pins entfernen, bevor ich das aktualisierte Array hinzufüge, oder wäre es besser, vorhandene Pins im Objekt MKAnnotation zu markieren und nur die neuen (nicht markierten) Pins hinzuzufügen?MKMapView Annotationen von aktualisiertem Array aktualisieren?

Antwort

6

Das Entfernen aller Pins und das Zurücksetzen des gesamten Arrays einschließlich der neuen Annotationen führt zu Flimmern und unnötigen Neuzeichnen von Pins, die nicht geändert wurden.

Wenn das Flimmern nicht erwünscht ist oder aus irgendeinem Grund eine vollständige Aktualisierung erforderlich ist, sollten Sie der Kartenansicht nur mitteilen, dass die neuen Pins hinzugefügt werden sollen.

nach dem Hauptanmerkungs-Array mit den neuen Stiften aktualisiert wird, eine so genannte temporäre Array konstruieren sagen newAnnots Verweise auf die neuen Anmerkungen in dem Hauptarray enthalten und newAnnots auf die addAnnotations: Methode der Kartenansicht passieren. Das temporäre Array kann anschließend verworfen werden.

Anstatt jedoch "neue" Anmerkungen zu kennzeichnen, können Sie einfach überprüfen, ob das Anmerkungsobjekt in Ihrem Haupt-Array bereits im Array annotations der Kartenansicht vorhanden ist. Zum Beispiel:

if (![mapView.annotations containsObject:annot_from_your_main_array]) { 
    [newAnnots addObject:annot_from_your_main_array]; 
} 

Im Vergleich mit den Anmerkungen Arrays Kartenansicht funktioniert nur, wenn die Beschriftungsobjekte in der Haupt Array sind die eigentlichen Anmerkungen, die Sie in der Kartenansicht geben in addAnnotation: oder addAnnotations:. Wenn Ihr Haupt-Array "aktualisiert" wird, sollten Sie nur die neuen Anmerkungen hinzufügen, anstatt das gesamte Array von Grund auf neu zu erstellen. Wenn dies der Fall ist, stimmen die Annotationsreferenzen nicht mit denen im Array der Kartenansicht überein.

Dasselbe gilt, wenn Sie Anmerkungen zu einem Update entfernen. Die entfernten Annotationen können zu einer temporären "Remove" -Liste hinzugefügt werden (indem überprüft wird, ob Annotationen im Array der Map-Ansicht in Ihrem Array vorhanden sind) und an removeAnnotations: übergeben werden.

Hinweis: Wenn Sie die Koordinaten einer vorhandenen Anmerkung in Ihrem Hauptarray aktualisieren, aktualisiert die Kartenansicht automatisch die Position der Anschlussstifte, solange das Anmerkungsobjekt in Ihrem Array die Methode setCoordinate: implementiert.

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, eine so ausführliche Antwort zu schreiben, sehr hilfreich. – fuzzygoat

Verwandte Themen