AVPlayerViewController UITapGestureRecognizer在ios 11中不起作用

时间:2018-04-14 20:18:17

标签: ios swift uiview uitapgesturerecognizer avplayerviewcontroller

我知道这可能是这个问题的复制品AVPlayer UITapGestureRecognizer not working

但是,我仍然发布它,因为我没有足够的代表对原始答案发表评论。

问题是如何将let wake_overlayview = UITapGestureRecognizer(target: self, action:#selector(self.wake_YCOverlayView)) 添加到self.player.view.addGestureRecognizer(wake_overlayview) 。我尝试过的事情:

self.player.contentOverlayView?.addGestureRecognizer(wake_overlayview)

(1)将手势识别器添加到控制器的视图中。这不起作用:

self.gesture_view.frame = CGRect(x: 0,
                                 y: 0,
                                 width: self.player.view.frame.size.width,
                                 height: self.player.view.frame.size.height)

self.player.view.addSubview(self.gesture_view) 
self.player.view.bringSubview(toFront: self.gesture_view)  
self.gesture_view.addGestureRecognizer(wake_overlayview)  
self.gesture_view.isUserInteractionEnabled = true

(2)将其添加到contentOverlayView:

self.player.view.subviews[0].addGestureRecognizer(wake_overlayview)

此解决方案似乎适用于此答案https://stackoverflow.com/a/48797984/4342489。但是,它对我不起作用......

(3)初始化UIView,在其上添加gestureRecognizer,然后将此视图添加到AVPlayer.view子视图。这不起作用:

{{1}}

(4)将识别器添加到player.view的第一个子视图中。这适用于ios 10但不适用于11,因为在11中,player.view没有任何子视图......

{{1}}

1 个答案:

答案 0 :(得分:2)

查看代码,看起来像是子类AVPlayerViewController。不建议这样做。来自Apple documentation:

  

重要

     

不要继承AVPlayerViewController。覆盖此类的方法不受支持,并导致未定义的行为。

但是,如果您仍然希望继承AVPlayerViewController,您可以通过覆盖touchesBegan来触及:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    print("touchesBegan")
}