使用 AVPlayerLayer 全屏

Posted

技术标签:

【中文标题】使用 AVPlayerLayer 全屏【英文标题】:Full Screen with AVPlayerLayer 【发布时间】:2018-04-04 02:29:45 【问题描述】:

我有两种观点

一个是像这样的AVPlayerLayer的容器

containerView.layer.addSublayer(playerLayer)

containerView 有自己的关于 superview 的自动布局

self.view.addSubview(containerView)
containerView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
containerView.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true
containerView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
containerView.heightAnchor.constraint(equalToConstant: 300).isActive = true

所以我覆盖viewDidLayoutSubviews()

override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()
    playerLayer.frame = containerView.frame

第二个视图是容器视图上的自定义播放控制视图

containerView.addSubview(playBackControlView)
playBackControlView.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true
playBackControlView.rightAnchor.constraint(equalTo: containerView.rightAnchor).isActive = true
playBackControlView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
playBackControlView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true

还有几个视图,例如UIButtonUISlider

这是我的问题

当我点击playBackControlView 上的一个按钮时,它调用enlargeScreenButton 如何使我的containerView、playBackControlView 和 AVPlayerLayer 像横向模式一样同时变成全屏

我已经阅读了this 的问题,但只有 playerLayer 发生了变化,而不是整个视图

(我不会旋转设备)

我在 *** 上做了很多事情,但它们都适合我的情况

如果我转换一些视图被破坏并且如果我用UIScreen.main.bounds 改变框架也破坏了一些视图

【问题讨论】:

我不是说你不能做你正在做的事情,但为什么不使用AVPlayerViewController?它为你管理全屏。 【参考方案1】:

我建议你创建一个带有自定义图层视图的 PlayerView 子类:

class PlayerView: UIView
    override class var layerClass: AnyClass 
        return AVPlayerLayer.self
    

这样您就可以在不关心子图层及其动画的情况下操作视图。然后您就可以使用类似于answer you mentioned 中的动画,但在视图上。使用自动布局添加所有子视图 - 你应该很高兴,当你使用 UIView.animate 制作动画时,它们应该会相应地改变@

【讨论】:

以上是关于使用 AVPlayerLayer 全屏的主要内容,如果未能解决你的问题,请参考以下文章

包装 AVPlayer 行为时处理 AVPlayerLayer

在 AVPlayerLayer 和 AVPlayerViewController 中同步视频

使用 AVPlayerLayer 全屏

AVPlayer

c_cpp 令人敬畏的优化AVPlayer,可在UICollectionView / UITableView中平滑滚动AVPlayerLayer(在iOS10 +上测试)

c_cpp 令人敬畏的优化AVPlayer,可在UICollectionView / UITableView中平滑滚动AVPlayerLayer(在iOS10 +上测试)