您需要设置图层的框架属性。例如。:
self.playerLayer.frame = CGRectMake(0, 0, 100, 100)
如果您尝试了此操作,但它在视图控制器的视图中不起作用,则可能是您尝试设置图层的frame
视图控制器的属性frame
or bounds
财产是{0, 0, 0, 0}
当时的AVPlayerLayer
被创建。您需要在布局过程中设置播放器的框架,此时视图控制器的frame
将被设置为除{0, 0, 0, 0}
。要正确执行此操作:
如果您在自定义 UIView(包括 IB)中使用自动布局:
override func layoutSubviews() {
super.layoutSubviews()
//Match size of view
CATransaction.begin()
CATransaction.setDisableActions(true)
self.playerLayer.frame = self.bounds
CATransaction.commit()
}
如果您在自定义 UIViewController 中使用自动布局:
override fun viewDidLayoutSubviews() {
//Match size of view-controller
CATransaction.begin()
CATransaction.setDisableActions(true)
self.playerLayer.frame = self.view.bounds
CATransaction.commit()
}
The CATransaction
线用于禁用图层帧更改上的隐式动画。如果您想知道为什么通常不需要这样做,那是因为默认情况下支持 UIView 的图层不会隐式设置动画。在这种情况下,我们使用非视图支持层(AVPlayerLayer
)
最好的方法是通过界面构建向视图控制器添加新视图,并在新添加的视图上设置自定义类。然后创建自定义视图类并实现layoutSubviews
code.