【问题标题】:nested AVPlayer fullscreen?嵌套 AVPlayer 全屏?
【发布时间】:2017-06-15 02:03:32
【问题描述】:

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

我想为 AVPlayers 框架设置动画以适应整个屏幕,本质上是一个全屏过渡,但是由于层次结构,我无法访问主 collectionview 键窗口...

这是我目前用来访问全屏边界的代码。

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

有什么建议吗?

【问题讨论】:

    标签: ios swift uicollectionviewcell avplayer avplayerviewcontroller


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我可以制作过渡动画吗?
    • 一个更好的问题是,当您说从单元格中删除 AVPlayerLayer 时,您的意思是从单元格中完全删除它,然后在 rootView 中创建它的新实例。因为如果我这样做,当我将它放置在根视图中时,我如何访问 AVPlayerLayer 的先前位置。 (如果可能的话,我想将它从以前的位置动画到全屏,反之亦然)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    相关资源
    最近更新 更多