全屏使用AVPlayerLayer

时间:2018-04-04 02:29:45

标签: ios swift avplayer avplayerlayer avkit

我有两个观点

一个是像这样的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

上的自定义播放控件视图
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,而不是整个视图

(我不会设备轮换)

我在Stackoverflow上做了很多事情,但它们适用于我的案例

如果我转换某些视图已被破坏,如果我用UIScreen.main.bounds更改框架也会打破一些视图

1 个答案:

答案 0 :(得分:0)

我建议您使用以下自定义图层视图创建一个PlayerView子类:

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

这样,您将能够在不关心子层及其动画的情况下操纵视图。然后,您将可以使用与answer you mentioned中的动画类似的动画,但是可以在视图上使用。使用自动布局添加了所有子视图后,您应该一切顺利,并且在使用UIView.animate

进行动画制作时,它们应进行相应的更改