0

我有一个AVPlayer,它位于CollectionView单元格内,位于UICollectionView内部,位于collectionview单元格内。嵌套AVPlayer全屏?

我想动画AVPlayers框架,以适应整个屏幕,但是本质上是因为我无法访问主的CollectionView keywindow层次的全屏过渡...

这是我的代码迄今为止试图访问全屏界面。

let window = UIApplication.shared.keyWindow! 
    let v = UIView(frame: CGRect(x: -(window.frame.origin.x), y: (window.frame.origin.y)/2, width: (window.frame.width)/2, height: (window.frame.height)/2)) 


     UIView.animate(withDuration: 1, delay: 0, options: UIViewAnimationOptions.curveEaseOut, animations: { 
      self.playerView?.bounds = v.bounds 
      self.layoutIfNeeded() 
     }, completion: { (completed) in 

     }) 

这个目前的功能是将playerView掩盖到单元格中嵌套collectionView的边界。这导致我相信,因为该方法可能是不可行的。

我希望会有像AVPlayer.fullscreen()或类似的东西,因为我知道有可能使用AVPlayerControllers覆盖视图来获得全屏视频,但我不希望用户不得不按下按钮来去全屏。我更喜欢我目前只是点击视频的方法。

任何建议?

回答

3

你需要使用一个AVPlayerLayer这层是将被添加为你想要的视图的子层。

在这种情况下,首先您需要将UIView添加到您的collectionViewCell并将您的AVPlayerLayer实例添加为子图层。

当电池的用户水龙头,你必须首先删除从细胞AVPlayerLayer和引用传递到你的根视图控制器在那里,你可以添加整个屏幕大小的一个新的UIView并添加AVPlayerLayer作为一个子层的观点。

请记住,如果你有一个导航控制器,你应该添加该UIView作为导航控制器的子视图,如果你有一个tabBar你需要将它添加到tabBar insted。

要从“全屏”模式返回,请做相反的操作。

+0

我可以使动画过渡? – Stefan

+0

更好的问题是,当你说从单元格中移除AVPlayerLayer时,你的意思是将它从单元格中完全移除,然后在rootView中创建它的新实例。因为如果我这样做,当我将它放在根视图中时,我如何访问AVPlayerLayer的前一个位置。 (如果可能的话,我想将它从之前的位置移动到全屏,反之亦然)。 – Stefan