9

我正在使用 swift 创建一个应用程序。在我的一个 ViewController 中,我有一个以编程方式创建的 GMSMapView。我希望用户能够在单击地图时触发操作。

我做了什么 :

import UIKit

class MapViewController: UIViewController, GMSMapViewDelegate {

let mapView = GMSMapView()

override func viewDidLoad() {
        super.viewDidLoad()

        mapView.delegate = self
        mapView.settings.scrollGestures = false
        mapView.frame = CGRectMake(0, 65, 375, 555)
        view.addSubview(mapView)


        var tap = UITapGestureRecognizer(target: self, action: "tap:")
        mapView.addGestureRecognizer(tap)
}

func tap(recogniser:UITapGestureRecognizer)->Void{
        println("it works")
    }

}

我试图覆盖 touchesBegan,没有工作。我试图插入 mapView.userInteractionEnabled = true,没有工作......

任何想法?

4

3 回答 3

8

我设法做到了

func mapView(mapView: GMSMapView!, didTapAtCoordinate coordinate: CLLocationCoordinate2D) {
        println("It works")
    }

但是,如果有人可以向我解释为什么其他解决方案不起作用,那就太好了!

于 2014-11-19T12:56:07.297 回答
2

您可以使用默认 MapVIew LongPress 事件

  /**

 * Called after a long-press gesture at a particular coordinate.
 *
 * @param mapView The map view that was pressed.
 * @param coordinate The location that was pressed.
 */
     - (void)mapView:(GMSMapView *)mapView
    didLongPressAtCoordinate:(CLLocationCoordinate2D)coordinate;
于 2017-07-27T16:23:43.623 回答
1

地图视图已经有自己的手势识别器,用于平移、缩放等。

所以你可能需要告诉系统它应该注意多个手势识别器。

作为UIGestureRecognizerDelegate协议的一部分:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}
于 2014-11-19T13:12:01.913 回答