我正在使用AirPlay来显示AVPlayerLayer。以下是我的代码片段:
let secondScreen = UIScreen.screens()[1]
secondScreen.overscanCompensation = UIScreenOverscanCompensation(rawValue: 3)!
let screenBounds = secondScreen.bounds
self.secondWindow = nil // free window when switching between two AirPlay devices
self.secondWindow = UIWindow.init(frame: screenBounds)
self.secondWindow?.screen = secondScreen
layer.removeFromSuperlayer()
layer.frame = screenBounds
layer.videoGravity = AVLayerVideoGravityResizeAspect
self.externalAirPlayView = nil // free view when switching between two AirPlay devices
self.externalAirPlayView = UIView(frame: screenBounds)
self.externalAirPlayView!.layer.addSublayer(layer)
self.secondWindow?.addSubview(self.externalAirPlayView!)
self.secondWindow?.makeKeyAndVisible()
此代码通常可以正常工作,但有时我会将(0,0,0,0)作为外部屏幕的边界。我还在UIScreenDidConnectNotification中得到(0,0,0,0)。在这两种情况下,AVPlayerLayer都不会显示在AirPlay设备上,因为窗口的框架设置不正确。
请注意,如果我将(0,0,0,0)作为边界甚至一次,我将永远不会再次获得正确的界限,直到我重新启动应用程序或重新初始化当前视图控制器。重新启动AirPlay设备似乎没有帮助。
有没有办法获得外部屏幕的正确范围?
答案 0 :(得分:0)
好的,我终于解决了这个问题。您可以在可用模式属性中找到正确的屏幕大小。代码看起来像这样
for screenMode in secondScreen.availableModes {
if screenMode.size.width != && screenMode.size.height != 0 {
screenBounds.size = screenMode.size
break
}
}