0

Wie kann ein GMSMarker beim Tippen aktiviert werden? Ich möchte, dass wenn ein Marker angetippt wird, ein Alarm-Controller auftaucht und fragt, ob der Benutzer den angetippten Marker speichern oder entfernen möchte. Also, wie würde ich die angetippte Markierung entfernen, wenn die Schaltfläche 'Entfernen' gedrückt wird? und wie bekomme ich es zu speichern, wenn der Benutzer später auf die Karte zugreift, wenn die 'Speichern' gedrückt wird. Ich habe diese Grundstruktur so weit, aber nicht sicher, wie die Funktionalität zu implementieren:GMSMarker entfernen, wenn er angezapft wird

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool { 

    print("didtapmarker") 
    let alert = UIAlertController(title: "Add this place to wishlist?", 
            message: "Would you like to add this to your list?", 
            preferredStyle: .alert) 

    let saveAction = UIAlertAction(title: "Save", 
            style: .default) 
    let cancelAction = UIAlertAction(title: "Remove", 
            style: .default) 


    //alert.addAction(defaultAction) 
    alert.addAction(saveAction) 
    alert.addAction(cancelAction) 


    self.present(alert, animated: true, completion: nil) 
    return false 
} 

Wo würde ich von hier aus? Irgendwelche Vorschläge würden geschätzt werden.

Antwort

0

Um einen Marker aus einer Karte zu entfernen, setzen map zu nil:

marker.map = nil 

Sie den obigen Code in handler Schließung setzen können, wenn Sie die UIAlertAction initialisieren:

let cancelAction = UIAlertAction(title: "Remove", 
           style: .default) { 
    _ in marker.map = nil 
} 

zu Speichern Sie den Marker ist ein bisschen komplizierter. Wenn Sie nur einen Marker gleichzeitig speichern möchten, können Sie UserDefaults verwenden.

if let latitude = marker.latitude?.doubleValue, let longitude = marker.longitude?.doubleValue { 
    UserDefaults.standard.set(latitude, forKey: "lat") 
    UserDefaults.standard.set(longitude, forKey: "lon") 
} 

Um die gespeicherte Markierung auf der Karte auf viewDidLoad zu zeigen, zuerst die gespeicherte Länge und Breite abrufen:

let latitude = UserDefaults.standard.double(forKey: "lat") 
let longitude = UserDefaults.standard.double(forKey: "lon") 

und die Werte verwenden, um ein neues GMSMarker zu konstruieren.

Wenn Sie mehrere Markierungen auf der Karte speichern möchten, müssen Sie Core Data verwenden. Dies ist ein wenig komplizierter als UserDefaults. Ich empfehle Ihnen, zuerst einige Tutorials zu lesen. Dann können Sie den Code eines ähnlichen Projekts lesen, das ich gemacht habe - LongLatMap.

+0

Perfekt. Sieht so aus, als müsste ich mich in Core Data vertiefen und wie ich es verwenden kann, so wie ich möchte, dass der Benutzer mehrere Marker speichern kann. Danke, dass Sie mich in die richtige Richtung weisen. –

0

Setzen Sie einfach die Karte auf Null und der Marker wird weg sein.

marker.map = nil 
Verwandte Themen