Optimierungscode für MKMapView - Große Anzahl von Anmerkungen

8

Ich habe eine modale Ansicht in meiner App, die eine UIMapView anzeigt. Ich füge dann eine große Anzahl von Anmerkungen (über 800) zu dieser Kartenansicht hinzu (Code unten).

Das Problem ist, dass der Benutzer gezwungen wird, eine Minute oder so zu warten, während alle Pins geladen werden. Auch die App wird träge sobald alle 800 Pins auf der Karte sind.

Kann jemand vorschlagen, wie ich meinen Code unten verbessern kann?

Danke.

%Vor%     
GuybrushThreepwood 27.10.2011, 19:14
quelle

2 Antworten

10

Die zwei größten Geschwindigkeitsverbesserungen, die Sie hier machen können, sind:

  • Wiederverwendung der Anmerkungsansicht implementieren (jetzt erstellt sie jedes Mal eine neue Ansicht, wenn eine Anmerkung angezeigt werden soll, selbst wenn dieselbe erneut angezeigt wird.
  • Ändere, wie UniqueID gesetzt wird. Um es festzulegen, durchläuft der Code jedes Mal, wenn eine Anmerkungsansicht erstellt wird, alle Annotationen (was immer passieren kann, wenn die Kartenansicht gezoomt oder gescrollt wird - nicht nur die Anfangszeit).

Zuerst müssen Sie in der Methode UniqueID nach dem viewForAnnotation suchen und den Anmerkungsbezeichner mit einem Schaltflächen-Tag versehen. Fügen Sie der benutzerdefinierten Anmerkungsklasse UniqueID als Eigenschaft hinzu. MyLocation und legen Sie die Eigenschaft fest, wenn Sie die Annotation selbst in addPins :

hinzufügen %Vor%

Sie könnten auch uniqueID als Parameter zur Methode initWithName hinzufügen, anstatt die Eigenschaft separat zuzuweisen.


Um die Wiederverwendung der Anmerkungsansicht zu implementieren, sollte die Methode viewForAnnotation wie folgt aussehen:

%Vor%


Um schließlich auf die Schaltfläche "drücken" zu reagieren und herauszufinden, für welche UniqueID die Details angezeigt werden sollen, implementieren Sie die calloutAccessoryControlTapped -Delegatenmethode:

%Vor%


Nach all diesen Änderungen nimmt nur das anfängliche Laden der Anmerkungen die meiste Zeit in Anspruch. Wenn das immer noch ein Problem ist, besteht eine Lösung darin, nur Anmerkungen hinzuzufügen, die in der aktuell angezeigten Region sichtbar wären, und Anmerkungen hinzuzufügen / zu entfernen, wenn der Benutzer den sichtbaren Bereich ändert.

    
Anna 27.10.2011, 20:37
quelle
4

Ich stimme Anna vollkommen zu. Bedenken Sie jedoch, dass 800 AnnotationViews gleichzeitig zu einer extrem verzögerten Schnittstelle führen. Wenn also Ihre Karte Benutzerinteraktionen wie Scrollen oder Zoomen ermöglichen soll, implementieren Sie besser eine Art Clustering Ihrer Anmerkungsansichten.

    
yinkou 27.10.2011 21:58
quelle