我有一个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?
答案 0 :(得分:3)
您需要使用AVPlayerLayer
此图层将作为子图层添加到您想要的视图中。
在这种情况下,首先您需要向UIView
添加collectionViewCell
,并将AVPlayerLayer
实例添加为子图层。
当用户点击单元格时,您必须首先从单元格中删除AVPlayerLayer
并将引用传递给您的根视图控制器,您可以添加一个整个屏幕大小的新UIView并添加{ {1}}作为该视图的子图层。
请记住,如果您有导航控制器,则应将该UIView添加为导航控制器的子视图,如果您有tabBar,则需要将其添加到tabBar中。
要从“全屏”模式返回,请执行相反操作。