K. Sergey
K. Sergey

Reputation: 167

add marker to GoogleMaps with UILongPressGestureRecognizer swift3

I want add marker with UILongPressGestureRecognizer, but my code doesn't works, what i did wrong?

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

this method doesn't works too..

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

Upvotes: 0

Views: 332

Answers (1)

Scriptable
Scriptable

Reputation: 19750

This code works perfectly fine for me. You do not need a UILongTapGestureRecogniser, just set the mapView delegate and use the didLongTapAt delegate function

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

Upvotes: 1

Related Questions