Adición de una anotación de pin a una vista de map en una pulsación larga en swift

Estoy intentando hacer una aplicación para iPhone que requiera que los usuarios puedan presionar un lugar largo en la vista del map para colocar un pin allí. ¿Alguien sabe cómo se hace esto?

El comportamiento es observable en los maps de Apple cuando presiona la pantalla por mucho time. Caerá un alfiler y presentará una anotación que dice "pin caído"

1) UILongPressGestureRecognizer un UILongPressGestureRecognizer y agréguelo a MKMapView .

2) Cuando el selector se llama después de que el usuario tiene una pulsación larga, llame al método MKMapView en MKMapView con el título y la coorderada apropiados.

3) Luego, asegúrese de cumplir con el MKMapViewDelegate e implementar viewForAnnotation: que se llamará inmediatamente después de agregar la anotación y devolver un MKPinAnnotationView

  1. agregue UILongPressGestureRecognizer a su MapView

     var uilgr = UILongPressGestureRecognizer(target: self, action: "addAnnotation:") uilgr.minimumPressDuration = 2.0 map.add (uilgr) //IOS 9 map.addGestureRecognizer(uilgr) 
  2. Agregar anotación en Detección prolongada – func:

     func addAnnotation(gestureRecognizer:UIGestureRecognizer){ if gestureRecognizer.state == UIGestureRecognizerState.Began { var touchPoint = gestureRecognizer.locationInView(map) var newCoordinates = map.convertPoint(touchPoint, toCoordinateFromView: map) let annotation = MKPointAnnotation() annotation.coordinate = newCoordinates CLGeocoder().reverseGeocodeLocation(CLLocation(latitude: newCoordinates.latitude, longitude: newCoordinates.longitude), completionHandler: {(placemarks, error) -> Void in if error != nil { println("Reverse geocoder failed with error" + error.localizedDescription) return } if placemarks.count > 0 { let pm = placemarks[0] as! CLPlacemark // not all places have thoroughfare & subThoroughfare so validate those values annotation.title = pm.thoroughfare + ", " + pm.subThoroughfare annotation.subtitle = pm.subLocality self.map.addAnnotation(annotation) println(pm) } else { annotation.title = "Unknown Place" self.map.addAnnotation(annotation) println("Problem with the data received from geocoder") } places.append(["name":annotation.title,"latitude":"\(newCoordinates.latitude)","longitude":"\(newCoordinates.longitude)"]) }) } } 
  3. o puede agregar annotations sin ningún título:

     func action(gestureRecognizer:UIGestureRecognizer){ var touchPoint = gestureRecognizer.locationInView(map) var newCoordinates = map.convertPoint(touchPoint, toCoordinateFromView: map) let annotation = MKPointAnnotation() annotation.coordinate = newCoordinates map.addAnnotation(annotation) } 

Actualice Swift3

 func action(gestureRecognizer:UIGestureRecognizer){ let touchPoint = gestureRecognizer.location(in: mapView) let newCoordinates = mapView.convert(touchPoint, toCoordinateFrom: mapView) let annotation = MKPointAnnotation() annotation.coordinate = newCoordinates mapView.addAnnotation(annotation) }