2016-05-16 19 views
6

Unterstützt Mapkit auf IOS das Entfernen von Überlagerungen? (wie es Anmerkungen tut). Wenn ja, wie lautet der Code dafür?unterstützt Mapkit on IOS das Entfernen von Überlagerungen? (wie es Anmerkungen tut)

Hintergrund: Mit Annotationen glaube ich, dass Sie viele hinzufügen können, MapKit zu Instanziieren Ansichten, wenn für sie über die Warteschlangeneinzugsanforderung erforderlich ist. Was ist mit der gleichen Sache für Overlays, wenn ich viele im ganzen Land habe? Muss ich den Code schreiben, um zu überprüfen, welche Overlays ich habe oder nicht, und dann instanziieren/entfernen Sie sie selbst in Echtzeit?

+0

PS. Auch wenn Leute (wenn das ein Problem ist) tatsächlich Overlays auf einer Karte als "Annotation" platzieren, um das zu umgehen? Wahrscheinlich würde nicht für große Overlays aber als Teil des Overlays möglicherweise Offscreen .... – Greg

+0

PSS. Eigentlich müssen etwa 8000 Overlays im ganzen Land installiert werden, also lade ich sie letztendlich alle im Voraus, oder muss ich sie manuell verwalten, so dass nur eine viel kleinere Anzahl zu einem bestimmten Zeitpunkt geladen wird? d. h. diejenigen, die sichtbar wären – Greg

Antwort

3

Map Kit unterstützt die Wiederverwendung von Overlays nicht auf die gleiche Weise, wie dies für Anmerkungsansichten unterstützt wird. Einer der Gründe dafür muss sicherlich sein, dass die beiden Objekte nicht analog sind. Überlagerungen sind Modellobjekte, die einen Bereich auf der Karte darstellen, während Anmerkungsansichten Ansichtsobjekte sind, die von Zeit zu Zeit verwendet werden, um den Standort einer Anmerkung auf der Karte anzuzeigen. Die Technik der Wiederverwendung von Ansichtsobjekten (im Gegensatz zur Erstellung einzelner Objekte für jede Verwendung) ist eine Optimierung, die an einigen anderen Stellen in UIKit verwendet wird, insbesondere für Tabellenansichtszellen und verschiedene Teile von Auflistungsansichten. Das View-Reuse-Pattern dient zum Einrichten eines Datenindexes (Tabellen-Indexpfade, Kartenkoordinaten), und dann muss ein Delegat ein geeignetes View-Objekt bereitstellen, das verwendet werden soll, wenn ein bestimmter Index/Ort in Sicht kommt. Wenn das Datenobjekt nicht mehr sichtbar ist, wird das Ansichtsobjekt in einer Warteschlange wiederverwendet.

Eine Annotation ist analog zu einer Überlagerung, und MapKit bietet auch keine Wiederverwendung für sie, und das aus gutem Grund: Sie sind die Daten, die angezeigt werden!

Das analoge Objekt zur Anmerkungsansicht ist ein Overlay-Renderer, der (natürlich!) Rendering für ein Overlay bereitstellt. Ich gehe davon aus, dass diese nicht wiederverwendet werden, weil sie keine View-System-Objekte sind und vermutlich viel leichter sind, so dass die Wiederverwendung wenig Nutzen bringt. Wir finden Hinweise dafür, dass der MapView-Delegierte bis iOS 7.0 ein View-Objekt für Overlays zur Verfügung stellte und dies durch das Renderer-Konzept ersetzt wurde.

Ich hoffe, dass hilft.

Welches Problem verursacht das für Sie?

+0

Ich habe mehrere hundert Overlays im ganzen Land zu platzieren. Ist die Idee, dass Sie eine große Anzahl laden können und dann MapView überlassen, um zu optimieren, was angezeigt werden soll? Möglicherweise müssen Sie diese aus dem Hauptthread hinzufügen, damit die Startzeit beim Starten der App für den Benutzer nicht wahrnehmbar ist, nehme ich an? Auch gibt es die Frage, wie man eine Liste der sichtbaren Überlagerungen erhält, nur für die ich hier eine Frage habe: http://stackoverflow.com/questions/37433336/how-to-get-visible-overlays-in-mapkit-ie -mkoverlay-mkoverlayrender-from-a-ma – Greg

+0

PS Eigentlich haben etwa 8000 oder so Overlays im ganzen Land an Ort und Stelle, so dass ich letztlich alle im Voraus laden, oder muss ich sie manuell verwalten, so dass nur ein viel kleinere Anzahl sind zu einem Zeitpunkt geladen? d.h. diejenigen, die sichtbar wären – Greg

+0

8000 ist eine große Zahl. Ich habe einen Test mit 7200 Overlays über die USA verteilt und sah spürbare Trägheit auf einem iPhone 5/iOS 9.3. Für eine ordentliche Leistung ist eine Art von Kacheln notwendig. Allerdings habe ich einen einfachen Stich gemacht und es war nicht besonders vielversprechend.Es sieht so aus, als ob der Vorgang des Hinzufügens oder Entfernens einer großen Anzahl von Überlagerungen selbst nicht sehr schnell ist. Vielleicht könnten Sie Ihre Daten so reorganisieren, dass jedes MKOverlay eine Kachel von "Overlays" innerhalb einer Region der Karte darstellt. Ihr Overlay-Renderer müsste beim Zeichnen der entsprechenden Datenelemente intelligent sein. – BrentM