我设置了我的代码,以便在 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
}
}
最佳答案
我建议使用带有 UITextField
的 UIAlertController
供用户输入名称。
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)
}
}
}
关于ios - Swift 3.0 在 MapView 上放置注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359054/