MKAnnotation Pin wird nicht gezogen, obwohl er als ziehbar festgelegt wurde

9

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.

%Vor%

Zusammen mit Erweiterung:

%Vor%

Ich habe auch eine benutzerdefinierte PinAnnotation-Klasse:

%Vor%     
TheBigBulgarian 04.05.2015, 01:20
quelle

1 Antwort

12

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.

    
Anna 04.05.2015, 02:57
quelle