Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 嵌入式AVPlayerController视图添加了AVTouchIgnoringView阻止默认播放器';s接口_Ios_Avkit_Avplayerviewcontroller - Fatal编程技术网

Ios 嵌入式AVPlayerController视图添加了AVTouchIgnoringView阻止默认播放器';s接口

Ios 嵌入式AVPlayerController视图添加了AVTouchIgnoringView阻止默认播放器';s接口,ios,avkit,avplayerviewcontroller,Ios,Avkit,Avplayerviewcontroller,更新:该问题与AVPlayerController视图无关,请参见下面我的答案。一开始,我对类的名称感到困惑,但这也是思考问题的一个错误途径 === 众所周知,Media Player框架在iOS 9中不受欢迎,因此我决定在我的新项目中尝试使用AVKit。我的任务是用下面的一些任意单元格显示嵌入到“收藏视图”标题(UICollectionReusableView)中的视频播放器 这就是我在代码中的实现方式: override func viewDidLoad() { super.viewDi

更新:该问题与AVPlayerController视图无关,请参见下面我的答案。一开始,我对类的名称感到困惑,但这也是思考问题的一个错误途径

===

众所周知,
Media Player
框架在iOS 9中不受欢迎,因此我决定在我的新项目中尝试使用
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
}
override func viewDidLoad(){
super.viewDidLoad()
apimager.loadVideo(){video in
let player=AVPlayer(URL:video.URL)
self.playervewcontroller.view.hidden=true
self.playervewcontroller.player=player
self.addChildViewController(self.playerViewController)
headerView.videoContainerView.addSubview(self.playerViewController.view)
制图.布局(self.playervewcontroller.view,
headerView.videoContainerView){(v1,v2)在
v1.leading==v2.leading
v1.bottom==v2.bottom
v1.trailing==v2.trailing
v1.top==v2.top
}
self.playervewcontroller.didMoveToParentViewController(self)
self.playervewcontroller.addObserver(self,
forKeyPath:KeyPath.ReadyForDisplay,选项:nil,上下文:nil)
}
}
重写函数observeValueForKeyPath(键路径:字符串,
ofObject对象:AnyObject,更改:[NSObject:AnyObject],
上下文:unsafemeutablepointer){
如果keyPath==keyPath.ReadyForDisplay{
dispatch\u async(dispatch\u get\u main\u queue()){
self.finishConstructingInterface()
}
}
}
func finishConstructingInterface(){
如果playervewcontroller.readyForDisplay==false{
返回
}
playerViewController.removeObserver(self,forKeyPath:KeyPath.ReadyForDisplay)
playervewcontroller.view.hidden=false
playerViewController.view.userInteractionEnabled=true
}
这种工作方式,播放器可以按预期工作,但我遇到了一个奇怪的问题:它的默认界面不响应触摸。为了理解这个问题,我查看了view debugger,发现顶部有
AVTouchIgnoringView
阻塞了接口:

所以我的问题是:什么是
AVTouchIgnoringView
,为什么它会干扰视频播放器界面?如何摆脱它?也许有一些很明显的原因我就是不明白


谢谢你的帮助

好的,解决了问题,它与
avplayervewcontroller
完全无关。原因是在我的例子中,播放器视图容器是
UIImageView
的一个子类,它
userInteractionEnabled
为NO:

此属性从UIView父类继承。此类将此属性的默认值更改为“否”


因此,将此属性设置为“是”解决了此问题。我不确定是否应该保留或删除这个问题,因为这会让读者有些困惑。

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

保留它。我经历了与您相同的调试过程,所以“AVTouchIgnoringView”是我来到这里的原因,它让我找到了一个解决方案。谢谢!:-)我知道将我的播放器viewcontroller添加到imageview lol是个坏主意,这是我应得的。好问题!