4

更新:这个问题与 AVPlayerControllerView 无关,请看下面我的回答。一开始班级的名字让AVTouchIgnoringView我很困惑,但这也是思考问题的错误路径。

===

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

这就是我在代码中这样做的方式:

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
}

这种工作,播放器按预期工作,但我遇到一个奇怪的问题:它的默认界面不响应 touches。为了理解这个问题,我查看了视图调试器,发现AVTouchIgnoringView顶部阻塞了界面:

顶部的 AVTouchIgnoringView

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

感谢您的任何帮助!

4

2 回答 2

6

好的,解决了这个问题,和它完全无关AVPlayerViewController原因是我的玩家视图容器是 的子类UIImageView,它覆盖 userInteractionEnabled为 NO:

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

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

于 2015-08-26T15:20:00.447 回答
1

另一个可能的答案是播放器位于高度不明确的滚动视图内。我遇到了这个并尝试设置用户交互和框架但没有改变。一旦我在内容上设置了静态高度,它就可以正常工作。

于 2018-01-12T19:45:37.017 回答