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