UITapGestureRecognizer无法与Google Maps SDK一起使用

lit*_*ium 4 ios swift

我有一个mapViewController,上面有一些自定义UIView(只有两个带有某些背景的标签)。我想在此UIView上点击后显示新的ViewController。

因此,我的代码(对于其他情况,这是一个可行的解决方案)用于自定义UIView:

 tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "checkGesture:")
        tapGestureRecognizer.numberOfTapsRequired = 1
        self.userInteractionEnabled = true
        self.addGestureRecognizer(tapGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)

func checkGesture(sender: UITapGestureRecognizer) {
    print("it works")
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里是什么问题?

编辑(已解决):因此,我尝试将此自定义UIView放在另一个ViewController上,并且可以正常工作。看来这个问题的主要根源是我的MapViewController中的下一部分代码:

let mapView = GMSMapView.mapWithFrame(CGRectZero, camera:camera)
    self.view = mapView
Run Code Online (Sandbox Code Playgroud)

没有最后一行(self.view = mapView),我的自定义UIView可以正常工作(但是我没有任何地图,因此我不得不对此代码稍作更改)。

let mapView = GMSMapView.mapWithFrame(CGRectMake(0, 0, self.view.frame.width, self.view.frame.height), camera:camera)
    self.view.addSubview(mapView)
Run Code Online (Sandbox Code Playgroud)

kst*_*nou 5

我认为,如果您不想将GMSMapView子视图添加为子视图,那么最好的解决方案是:

  1. 添加GMSMapViewDelegate到您的中ViewController

  2. viewDidLoadViewController添加的上myMapView.delegate = self

  3. 还添加以下功能:

    func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
        print("!map tapped!")
    }
    
    Run Code Online (Sandbox Code Playgroud)