嵌套的AVPlayer全屏?

时间:2017-06-15 02:03:32

标签: ios swift uicollectionviewcell avplayer avplayerviewcontroller

我有一个AVPlayer,它位于collectionview单元格内,位于UICollectionView内,位于collectionview单元格内。

我想为AVPlayers框架设置动画以适应整个屏幕,基本上是全屏转换,但由于层次结构我无法访问主集合视图关键窗口...

这是我到目前为止试图访问全屏界限的代码。

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覆盖视图获取全屏视频,但我不希望用户必须按下按钮才能全屏。我更喜欢我目前仅点击视频的方法。

任何suggesetions?

1 个答案:

答案 0 :(得分:3)

您需要使用AVPlayerLayer此图层将作为子图层添加到您想要的视图中。

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

当用户点击单元格时,您必须首先从单元格中删除AVPlayerLayer并将引用传递给您的根视图控制器,您可以添加一个整个屏幕大小的新UIView并添加{ {1}}作为该视图的子图层。

请记住,如果您有导航控制器,则应将该UIView添加为导航控制器的子视图,如果您有tabBar,则需要将其添加到tabBar中。

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