使用 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
还有几个视图,例如UIButton
、UISlider
等
这是我的问题
当我点击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 中同步视频
c_cpp 令人敬畏的优化AVPlayer,可在UICollectionView / UITableView中平滑滚动AVPlayerLayer(在iOS10 +上测试)
c_cpp 令人敬畏的优化AVPlayer,可在UICollectionView / UITableView中平滑滚动AVPlayerLayer(在iOS10 +上测试)