2010-12-05 7 views
0

Ich habe ein Problem mit Objective C im Moment mit der Entwicklung von etwas Besonderem.Annotation auf MKMapView basierend auf dem Benutzerstandort anzeigen

Also - nachdem die MKMapView initialisiert wurde und die Benutzerposition angezeigt wird, möchte ich eine Methode implementieren, Annotationen zu zeigen, die neben der Benutzerposition sind. Ich habe alle notwendigen Punkte in einer SQLite-Datenbank in einer speziellen Tabelle gespeichert. Ich habe zwei Felder - nämlich lon und lat - ich denke, es ist klar, was damit gemeint ist.

Hat jemand eine Idee, wie man JUST diejenigen Anmerkungen, die auf dem Bildschirm sichtbar sind, so leistungsfähig wie möglich zu zeigen. Nachdem der Benutzer scrollt die Karte - sollte es die Methode erneut aufrufen in der Datenbank zu suchen, ob es auch andere Punkte sind, die gezeigt werden müssen ...

Sie in Betr.Std für Ihre Hilfe,

Mit freundlichen Grüßen,

Dominik

+0

Ich konnte erhalten, was ich brauchte. Danke 'nevan' und' deanWombourne' für deine hilfreichen Eingaben! – thedom

Antwort

1

Sie müssen ein paar Dinge zu tun.

1) Holen Sie sich das Zentrum Ihrer Karte - nutzen Sie die centerCoordinate Eigentum Ihrer MKMapView

2) Stellen Sie Ihre Datenbank für alle Elemente in einem gewissen Abstand von der Mitte der Karte.

3) Bringen Sie diese

Es ist (2), das ist die knifflige Frage - Sie benötigen eine Methode, die alle Elemente in der Nähe des lat lng zurückkehren Sie haben.

This link verfügt über eine praktische Umsetzung, wie das zu tun :)

Hoffnung, das hilft.

+0

Danke für Ihren Link! Ich denke, dass meine Lösung darauf basieren wird :). Wird wieder posten, wenn ich klar bin, wie ich alles lösen soll. – thedom

1

Ein paar Punkte:

Wenn Sie iOS4 verwenden, hat das mapview Verhalten so geändert, dass es Speicher speichert automatisch, indem nur die Anmerkungen zu schaffen, das im sichtbaren Ansicht ist.

Zweitens, auf die gleiche Weise, wie Sie eine Tabellenansicht mit Tausenden von Zellen erstellen können und trotzdem reibungslos scrollen, beeinflussen die Offscreen-Anmerkungen die Leistung nicht so sehr. Sie sollten Ihre Anmerkungen sehr klein halten, damit sie nicht viel Speicher verbrauchen. Die Anmerkungsansichten sind diejenigen, die den Speicher belegen.

Ihr Problem wird auftreten, wenn der Benutzer zoomt und zu viele Anmerkungsansichten gleichzeitig angezeigt werden. Wenn Sie herangezoomt sind, müssen Sie sich keine Gedanken über Anmerkungen auf dem Bildschirm machen.

+0

Danke für Ihre Antwort! Ja, ich benutze iOS 4 - das ist also ein Vorteil :)). Aber ich brauche eine Methode, die zum Beispiel die nächsten vier Punkte zur Position des Benutzers zeigt und alles basierend auf dieser Region neu zentriert. Also, ich muss ein bisschen Mathe machen, denke ich ... – thedom

+0

Am einfachsten ist es, die Punkte zu durchlaufen, jede in eine 'CLLocationCoordinate2D' umzuwandeln und die' distanceFromLocation' Methode zu benutzen, um die Entfernung zu finden. Behalten Sie die vier kleinsten Abstände bei. Oder suchen Sie nach Haversine Formel, um Ihre eigenen zu machen. Deans Link ist der, den ich benutzt habe. –