我有两个观点
一个是像这样的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
并且有多个视图,例如UIButton
,UISlider
等
这是我的问题
当我点击playBackControlView
上的一个调用enlargeScreenButton
的按钮时,怎样才能使我的containerView,playBackControlView和AVPlayerLayer像风景模式一样全屏显示
我已经阅读了this个问题但只更改了playerLayer,而不是整个视图
(我不会设备轮换)
我在Stackoverflow上做了很多事情,但它们适用于我的案例
如果我转换某些视图已被破坏,如果我用UIScreen.main.bounds
更改框架也会打破一些视图
答案 0 :(得分:0)
我建议您使用以下自定义图层视图创建一个PlayerView子类:
class PlayerView: UIView
override class var layerClass: AnyClass {
return AVPlayerLayer.self
}
}
这样,您将能够在不关心子层及其动画的情况下操纵视图。然后,您将可以使用与answer you mentioned中的动画类似的动画,但是可以在视图上使用。使用自动布局添加了所有子视图后,您应该一切顺利,并且在使用UIView.animate