GMSMapView中的UITapGestureRecogniser

时间:2014-11-19 12:36:13

标签: ios swift uitapgesturerecognizer gmsmapview

我正在使用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,没有工作......

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

我设法用

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

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

答案 1 :(得分:1)

您可以使用默认的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;

答案 2 :(得分:0)

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

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

作为UIGestureRecognizerDelegate协议的一部分:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}