我正在使用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,没有工作......
有什么想法吗?
答案 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
}