Ich habe ein Leistungsproblem in Bezug auf das Hinzufügen von Anmerkungen zu Karten in iOS (mit den Standard-Mapkit-Methoden - daher mit Apple-Karten). Ich versuche, eine große Anzahl von Annotationen (10000+) in großen Mengen hinzuzufügen, unter Verwendung der (void)addAnnotations:(NSArray *)annotations
Methode. Die Beschriftungsobjekte sind nichts Besonderes - eine sehr einfache Klasse, die MKAnnotation
mit nur den Konstruktor implementiert wie folgt definiert:Hinzufügen von Anmerkungen zu einer Karte sind zu langsam - iOS
- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d {
if(self = [super init]) {
title = ttl;
coordinate = c2d;
}
return self;
}
Um zu testen, habe ich eine grundlegende App erstellt, die die Anmerkungen zu einer Basiskarte fügt einfach Blick auf Last, und es dauert etwa 6-7 Sekunden auf einem iPad 2. Sehr akzeptable Leistung. Die Dinge werden jedoch kompliziert, wenn ich dieselbe grundlegende Kartenansicht in meine eigene Anwendung einbette. Es ist die exakt gleiche Logik, aber wenn ich es in meiner App mache, dauert es etwa 50 Sekunden, um alle Anmerkungen zu laden.
Meine App hat eine Reihe von Ansichten ineinander. Um das Problem zu lokalisieren, habe ich begonnen, die Kartenansicht von der untersten Ebene bis zur obersten Ebene einzubetten. Ich habe in jedem Schritt Profiling durchgeführt, um zu sehen, ob es der Leistung hilft, aber ich sehe keine Ergebnisse - es sind immer noch rund 50 Sekunden. Im Moment lädt und fügt meine App die Annotationen nur in die oberste und einzige Level-Map-Ansicht ein, idealerweise die selbe wie die Standalone-App, aber aus welchen Gründen auch immer, ich sehe immer noch, dass das Annotation-Rendering ungefähr 50 Sekunden dauert. Die einzige vernünftige Erklärung, die ich habe, betrifft einige meiner App-Einstellungen, die die Kartenleistung beeinträchtigen. Ich habe eine Menge gelesen, um ohne Erfolg eine Lösung zu finden.
Wer hat irgendwelche Ideen, woran das Problem liegen könnte? Vielen Dank!
Große Frage und Tiefe/Detail. Leider kenne ich die Antwort nicht, aber für eine First-Timer-Frage zu StackOverflow muss ich dich applaudieren! – MCKapur
Ich habe nicht viel MapKit gespielt, aber hier sind 2 mögliche Optionen: 1) Versuche es in einem bg-Thread (nicht sicher, ob es funktioniert). 2) Laden Sie nur Annotationen, die in einem definierten Zoom sinnvoll sind. Wenn Sie also sehr verkleinert sind, können Sie nur einen Wert von 20 anzeigen. Wenn Sie zoomen, beträgt die Anzahl der möglichen Beschriftungen weniger als 10k. Zeigen Sie also die nächsten 20 wichtigeren Werte an, die das aktuelle Ansichtsfenster schneiden ... und so weiter. – LocoMike