gpt4 book ai didi

ios - Swift 3.0 在 MapView 上放置注释

转载 作者:可可西里 更新时间:2023-11-01 02:04:21 25 4
gpt4 key购买 nike

我设置了我的代码,以便在 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
}
}

最佳答案

我建议使用带有 UITextFieldUIAlertController 供用户输入名称。

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)
}
}
}

Screenshot of UIAlertController

关于ios - Swift 3.0 在 MapView 上放置注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com