我设置了我的代码,这样长按mapView就可以让用户放下一个引脚。我想知道是否有一种方法可以允许用户输入注释的标题,这样按下注释后(一旦放置引脚),标题就会显示出来。
var locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
let mapPress = UILongPressGestureRecognizer(target: self, action: #selector(AddressVC.addAnnotation(_:)))
mapPress.minimumPressDuration = 1.5
mapView.addGestureRecognizer(mapPress)
}
func addAnnotation(_ recognizer: UIGestureRecognizer){
let annotations = self.mapView.annotations
self.mapView.removeAnnotations(annotations)
let touchedAt = recognizer.location(in: self.mapView) // adds the location on the view it was pressed
let newCoordinates : CLLocationCoordinate2D = mapView.convert(touchedAt, toCoordinateFrom: self.mapView) // will get coordinates
let annotation = MKPointAnnotation()
annotation.coordinate = newCoordinates
self.mapView.addAnnotation(annotation)
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if (annotation is MKUserLocation) {
//if annotation is not an MKPointAnnotation (eg. MKUserLocation),
return nil
}
let identifier = "pinAnnotation"
if let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) {
annotationView.annotation = annotation
return annotationView
} else {
let annotationView = MKPinAnnotationView(annotation:annotation, reuseIdentifier: identifier)
annotationView.isEnabled = true
annotationView.canShowCallout = true
return annotationView
}
}
答案 0 :(得分:1)
我建议使用UIAlertController
和UITextField
用户输入名称。
import UIKit
import MapKit
class ViewController: UIViewController {
@IBOutlet weak var map: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let tap = UILongPressGestureRecognizer(target: self, action: #selector(self.createAnnotation))
self.map.addGestureRecognizer(tap)
}
func createAnnotation(gesture: UILongPressGestureRecognizer){
if gesture.state == .began {
let point = gesture.location(in: self.map)
let coordinate = self.map.convert(point, toCoordinateFrom: nil)
let alertVC = UIAlertController(title: "Create Pin", message: "Enter a title for your pin.", preferredStyle: .alert)
alertVC.addTextField { (textfield) in
textfield.placeholder = "Enter a Title"
textfield.autocapitalizationType = .words
}
alertVC.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
alertVC.addAction(UIAlertAction(title: "Create", style: .default, handler: { (action) in
guard
let textfield = alertVC.textFields?.first,
let text = textfield.text
else {
return
}
let pin = MKPointAnnotation()
pin.title = text
pin.coordinate = coordinate
self.map.addAnnotation(pin)
}))
self.present(alertVC, animated: true, completion: nil)
}
}
}