Fehlgeschlagene Mapkit-Leistung

8

Ich plane mit Mapkit über 500 Punkte auf einer Karte. Zoomen ist ein wenig nervös im Vergleich zu der nativen Google Map App. Ich habe entdeckt, was die Langsamkeit verursacht. Ich füge benutzerdefinierte Anmerkungen hinzu, damit ich später verschiedene Stiftfarben und Schaltflächen für Detailansichten hinzufügen kann:

%Vor%

Wenn ich den obigen Code auskommentiere, funktioniert alles gut. Sehr glatt mit Zoom in / out. Soll ich Anmerkungen anders hinzufügen, um die Leistung zu steigern?

    
user230949 08.02.2010, 02:12
quelle

5 Antworten

6

500 Annotationen sind wahrscheinlich zu viele, aber nicht so viele, dass die Leistung leidet, wenn Sie nur einige davon sehen. Sie sollten jedoch die Quotalisierung Ihrer Anmerkungen verwenden, um die Leistung zu verbessern.

%Vor%

Auch mit 500 Pins dauert die Drop-Animation sehr lange. Sie sollten das mit [view setAnimatesDrop:NO]

ausschalten     
nevan king 08.02.2010 05:48
quelle
3

Ich habe eine iPhone-App für einen Kunden geschrieben und einen Ladenlokator für eine ihrer Ladenmarken hinzugefügt. Es enthält 501 Standorte und während die Animation kann ein wenig ruckartig sein, wenn Sie die gesamte USA gezoomt ist, ist es völlig in Ordnung auf die staatliche Ebene gezoomt, wo nur eine Handvoll Pins sichtbar sind.

Die Schlüssel:

  • Zoomen Sie den Benutzer auf seinen aktuellen Standort, bevor Sie Ihre Anmerkungen hinzufügen.
  • Annotation-Ansichten mit dequeueReusableAnnotationViewWithIdentifier: erneut verwenden.

Um den ersten Punkt zu erreichen, müssen Sie die Standortaktualisierungen aktivieren und eine Markierung setzen, wenn Sie die erste erhalten. Animieren Sie die Karte an diesem Ort mit einem für Ihre App sinnvollen Regionsbereich, und überprüfen Sie dann in mapView:regionDidChangeAnimated: , ob Sie die Annotationen und noch hinzufügen müssen, damit der aktuelle Standort aktualisiert wurde Sie rufen addAnnotation: auf.

Wenn Sie den Standort des Benutzers nicht vergrößern können oder wollen, können Sie die auf der höchsten Ebene angezeigten Annotationen filtern und nur zusätzliche Annotationen hinzufügen, während der Benutzer die Ansicht vergrößert?

Übrigens, ich glaube, Sie haben einen Speicherverlust in Ihrem Code, wie oben beschrieben. Auch wenn Sie den Mechanismus zum Entfernen von Warteschlangen nicht verwenden möchten, sollte die Ansicht, die Sie von mapView:viewForAnnotation: zurückgeben, automatisch freigegeben werden.

    
Steve Madsen 10.02.2010 15:28
quelle
2

Ich denke, St3fan ist richtig. Theoretisch können Sie einfach Anmerkungen zur Karte hinzufügen und die Ansicht mit der Anzeige von ihnen umgehen lassen, aber in der Realität ist es besser, wenn Sie die Zählung ein wenig heruntersetzen, 500 auf dem Bildschirm wären zu viele, um sie trotzdem zu sehen.

Es gibt jedoch noch einen weiteren Schritt: Stellen Sie sicher, dass alle Annotation-Ansichten opak wie folgt auf YES gesetzt sind:

%Vor%     
quelle
1

Es klingt für mich so, dass das Hinzufügen von 500 Kartenpunkten zu einem Abschnitt einer Karte, die Größe des iPhone-Bildschirms, keinen Sinn ergibt. Es gibt keine Möglichkeit, das zu visualisieren oder auf die richtige Anmerkung zu klicken.

Können Sie nicht die Zoomstufe und die Mitte der Karte betrachten und dann entscheiden, nur eine Teilmenge von Anmerkungen zur Karte hinzuzufügen?

Ich denke, ich habe schon andere Apps gesehen.

    
Stefan Arentz 08.02.2010 03:29
quelle
1

Wenn Sie Anmerkungen, die der Benutzer nicht sieht, nicht aus der Ansicht entfernen, ist das eine Sache, die Sie mit MKMapViewDelegate erledigen können. Wenn die Leistung abnimmt, wenn der Benutzer auf Länderebene verkleinert wird, möchten Sie möglicherweise aggregierte Informationen zu Zoomstufen & gt; ein gewisser konstanter Wert, z.B. Statt 30 Annotationen innerhalb von 10 Quadratmeilen zeigen einzelne Annotationen wie [30 something] .

    
Igor Romanov 29.03.2010 14:09
quelle