嵌入式AVPlayerControllerView添加AVTouchIgnoringView阻止默认播放器界面

时间:2015-08-26 12:00:57

标签: ios avkit avplayerviewcontroller

更新:该问题与AVPlayerControllerView无关,请参阅下面的答案。班级AVTouchIgnoringView的名字在一开始就让我困惑,但这也是思考问题的错误途径。

===

众所周知,{9}框架在iOS 9中已被弃用,因此我决定在我的新项目中尝试使用Media Player。我的任务是显示嵌入在集合视图'标题(AVKit)内的视频播放器,下面有一些任意单元格。

这是我在代码中执行此操作的方式:

UICollectionReusableView

这种作品,播放器按预期工作,但我遇到一个奇怪的问题:它的默认界面不响应触摸。为了理解这个问题,我看了一下view debugger,我在那里找到了override func viewDidLoad() { super.viewDidLoad() apiManager.loadVideo() { video in let player = AVPlayer(URL: video.url) self.playerViewController.view.hidden = true self.playerViewController.player = player self.addChildViewController(self.playerViewController) headerView.videoContainerView.addSubview(self.playerViewController.view) Cartography.layout(self.playerViewController.view, headerView.videoContainerView) { (v1, v2) in v1.leading == v2.leading v1.bottom == v2.bottom v1.trailing == v2.trailing v1.top == v2.top } self.playerViewController.didMoveToParentViewController(self) self.playerViewController.addObserver(self, forKeyPath: KeyPath.ReadyForDisplay, options: nil, context: nil) } } override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { if keyPath == KeyPath.ReadyForDisplay { dispatch_async(dispatch_get_main_queue()) { self.finishConstructingInterface() } } } func finishConstructingInterface() { if playerViewController.readyForDisplay == false { return } playerViewController.removeObserver(self, forKeyPath: KeyPath.ReadyForDisplay) playerViewController.view.hidden = false playerViewController.view.userInteractionEnabled = true } 顶部的阻塞界面:

AVTouchIgnoringView on the top

所以我的问题是:AVTouchIgnoringView是什么?它为什么会干扰视频播放器界面?以及如何摆脱它?也许有一些非常明显的原因,我只是没有看到?

感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

好的,解决了这个问题,完全不相关到了AVPlayerViewController。原因是我的案例中的玩家视图容器是UIImageView的子类,overrides userInteractionEnabled为NO:

  

此属性继承自UIView父类。此类将此属性的默认值更改为NO。

因此,将此属性设置为YES可解决此问题。不确定我是应该保留这个问题还是将其删除,因为这有点让读者感到困惑。

答案 1 :(得分:1)

另一个可能的答案是玩家位于高度模糊的滚动视图中。我遇到了这个并尝试设置用户交互和框架,但没有变化。一旦我在内容上设置静态高度就可以了。