Google maps 使用UILongPressGestureRecognitizer swift3向谷歌地图添加标记

Google maps 使用UILongPressGestureRecognitizer swift3向谷歌地图添加标记,google-maps,swift3,marker,Google Maps,Swift3,Marker,我想用UILongPressGestureRecognitor添加标记,但我的代码不工作,我做错了什么 func setupGesture() { let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(action)) longPressRecognizer.minimumPressDuration = 1.0 mapView.a

我想用UILongPressGestureRecognitor添加标记,但我的代码不工作,我做错了什么

func setupGesture() {
        let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(action))
        longPressRecognizer.minimumPressDuration = 1.0
        mapView.addGestureRecognizer(longPressRecognizer)
    }

    func action(recognizer: UILongPressGestureRecognizer) {
        if (recognizer.state == .ended) {
            DispatchQueue.main.async {
                let longPressPoint = recognizer.location(in: mapView)
                let coordinate = self.mapView.projection.coordinate(for: longPressPoint)
                let marker = GMSMarker(position: coordinate)
                marker.title = "Hello World"
                marker.map = mapView
            }
        }
    }
这种方法不太管用

extension MapViewController: GMSMapViewDelegate {
    func mapView(_ mapView: GMSMapView, didLongPressAt coordinate: CLLocationCoordinate2D) {
        DispatchQueue.main.async {
            let marker = GMSMarker(position: coordinate)
            marker.title = "Hello World"
            marker.map = mapView
        }
    }
}

这个代码对我来说非常好。您不需要UILongTapGestureRecograiser,只需设置mapView委托并使用DidLongTap委托函数即可

class ViewController: UIViewController {

    var mapView: GMSMapView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.mapView.delegate = self
    }

    override func loadView() {
        // Create a GMSCameraPosition that tells the map to display the
        // coordinate -33.86,151.20 at zoom level 6.
        let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 6.0)
        self.mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        view = mapView

        // Creates a marker in the center of the map.
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: -33.86, longitude: 151.20)
        marker.title = "Sydney"
        marker.snippet = "Australia"
        marker.map = mapView
    }
}

extension ViewController: GMSMapViewDelegate {
    func mapView(_ mapView: GMSMapView, didLongPressAt coordinate: CLLocationCoordinate2D) {
        let marker = GMSMarker()
        marker.position = coordinate
        marker.title = ""
        marker.snippet = ""
        marker.map = mapView
    }
}

确保在主线程DispatchQueue.main.async{//您的标记代码是的,我在主线程中更新了,但是标记没有出现感谢您共享代码,我忘记了在ViewDidLoad中设置mapView.delegate=self