使用 UILongPressGestureRecognizer swift 3 向谷歌地图添加标记
add marker to GoogleMaps with UILongPressGestureRecognizer swift3
我想用 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
}
}
}
这段代码对我来说工作得很好。您不需要 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
}
}
我想用 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
}
}
}
这段代码对我来说工作得很好。您不需要 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
}
}