使用UILongPressGestureRecognizer swift3为GoogleMaps添加标记

时间:2017-04-15 21:13:56

标签: google-maps swift3 marker

我想用UILongPressGestureRecognizer添加标记,但我的代码不起作用,我做错了什么?

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

1 个答案:

答案 0 :(得分:1)

这段代码对我来说非常好。您不需要UILongTapGestureRecogniser,只需设置mapView委托并使用didLongTapAt委托函数

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