ios - ubicacion - maps para iphone
Agregar una anotaciĆ³n de marcador a una vista de mapa en una pulsaciĆ³n larga en swift (4)
agregue
UILongPressGestureRecognizer
a su MapViewvar uilgr = UILongPressGestureRecognizer(target: self, action: "addAnnotation:") uilgr.minimumPressDuration = 2.0 map.add (uilgr) //IOS 9 map.addGestureRecognizer(uilgr)
Agregar anotación en Long press detect - 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)"]) }) } }
o puede agregar una anotación 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) }
Intento crear una aplicación para iPhone que requiera que los usuarios puedan presionar durante mucho tiempo sobre un lugar en una vista de mapa para soltar un alfiler allí. ¿Alguien sabe cómo se hace esto?
El comportamiento es observable en los mapas de manzana cuando presiona largamente en la pantalla. Soltará un pin y presentará una anotación que dice "pin caído"
Actualiza 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)
}
1) UILongPressGestureRecognizer
una instancia de UILongPressGestureRecognizer
y UILongPressGestureRecognizer
a MKMapView
.
2) Cuando se llama al selector después de que el usuario tiene una pulsación larga, llame al método MKMapView
en MKMapView
con el título y la coordenada apropiados.
3) Luego, asegúrese de cumplir con MKMapViewDelegate
e implementar viewForAnnotation:
que se llamará justo después de agregar la anotación y devolver un MKPinAnnotationView
Primero declare UIGesture en ViewDidLoad
let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(addWaypoint(LongGesture:)))
mapView.addGestureRecognizer(longGesture)
En segundo lugar, agregue la función para longPress
@objc func addWaypoint(LongGesture : UIGestureRecognizer) {
let touchPoint = LongGesture.location(in: mapView)
let wayCoords = mapView.convert(touchPoint, toCoordinateFrom: mapView)
let location = CLLocation(latitude: wayCoords.latitude, longitude: wayCoords.longitude)
myWaypoints.append(location)
let wayAnnotation = MKPointAnnotation()
wayAnnotation.coordinate = wayCoords
wayAnnotation.title = "waypoint"
myAnnotations.append(location)
}
Recomiendo crear las anotaciones en una matriz que te servirá más tarde si quieres eliminarla, así ...
var myAnnotations = [CLLocation]()
Si tiene anotaciones diferentes, puede eliminar solo las anotaciones que desee, para eso cuando agregue una nueva anotación agregue a la matriz. Para eliminar solo un grupo de anotaciones solo haz lo siguiente
for dots in myAnnotations{
mapView.removeAnnotation(dots)
}
Para eliminar todas las anotaciones, pruebe
mapView.removeAnnotations(mapView.annotations)
Disculpas por la traducción ...