Ich habe schon seit Ewigkeiten versucht, eine ziehbare Annotation auf eine Mapview zu setzen. (Ich benutze den Standard-Pin, nicht meinen eigenen) Bisher kann ich es nur an festgelegten Koordinaten anzeigen (nicht wirklich eine Leistung), und ich muss die Annotation zuerst auf die Auswahl reagieren lassen, das tut es nicht werde nie vom didChangeDragState
func empfangen. Dann muss ich in der Lage sein, es zu ziehen, es an einem neuen Ort zu platzieren und die Koordinaten des neuen Ortes zu erhalten.
Ich bin Swift relativ neu, aber ich habe ein ziemlich schwieriges Projekt übernommen.
Ich habe mir so ziemlich alles angesehen, was ich auf Google finden konnte, wenn ich nach "ziehbarem MKAnnotation
mapkit in Swift" und ähnlichen Varianten suchte. (Bearbeiten: Ich hatte keine Antworten gefunden, die mein Problem beleuchten, wo alle andere Antworten gaben Antworten darauf, wie man ein personalisiertes MKAnnotation
hochladen kann.Sie hatten alle Titelfelder, aber keine der Antworten erwähnte, dass ein Titelfeld notwendig war, was sich als das Hauptproblem herausstellte.Sie erwähnten nur, dass ich das einstellen sollte dragState, um die Bewegung des Pins zu steuern, aber das stellte sich in meinem Fall als falsch heraus, wie Sie unten sehen) ANYWAY!
Unten ist mein Code, wo ich versuche, die mapView zu implementieren und eine Annotation hinzuzufügen.
Zusammen mit Erweiterung:
%Vor%Ich habe auch eine benutzerdefinierte PinAnnotation-Klasse:
%Vor% Das erste Problem ist, dass die title
der Anmerkung nicht gesetzt ist.
Wenn die title
einer Anmerkung nicht gesetzt ist, kann sie nicht auf einen "ausgewählten" Zustand gesetzt werden und es wird keine Legende angezeigt und didSelectAnnotationView
wird nicht aufgerufen.
Da Sie eine Anmerkung ziehen müssen, müssen Sie sie zuerst auswählen , Sie können sie jedoch nicht ziehen, wenn title
nicht gesetzt ist.
Legen Sie also bei der Erstellung der Anmerkung% code% auf etwas fest:
%Vor%
Dies sollte zumindest erlauben, dass Sie es ziehen, aber da Sie title
anstelle der einfachen MKPinAnnotationView
verwenden, müssen Sie nicht MKAnnotationView
implementieren. Wenn Sie es bei der Verwendung von didChangeDragState
implementieren, wird die Anmerkung nicht richtig gezogen.
Entfernen Sie in MKPinAnnotationView
den Code, der didChangeDragState
festlegt - Sie benötigen ihn nicht, wenn Sie view.dragState
verwenden.
Stattdessen können Sie einfach die Koordinaten protokollieren, an denen die Anmerkung gelöscht wird:
%Vor%Nicht verwandt, aber die
MKPinAnnotationView
Implementierung ist komplizierter als es sein muss. Sie müssen keine expliziten Methoden zum Abrufen und Festlegen für PinAnnotationClass
schreiben. Erklären Sie einfach coordinate
und der Getter / Setter wird für Sie erledigt:
%Vor%
Sie müssen auch ändern, wie die Koordinate zugewiesen wird:
%Vor%Endlich auch unabhängig, aber diese Zeile in
coordinate
%Vor%
bedeutet und tut nichts, entfernen Sie es.
Tags und Links ios swift mkmapview mkmapviewdelegate mkpinannotationview