AirPlay外部屏幕返回(0,0,0,0)作为边界

时间:2016-06-22 23:47:00

标签: ios swift airplay

我正在使用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设备似乎没有帮助。

有没有办法获得外部屏幕的正确范围?

1 个答案:

答案 0 :(得分:0)

好的,我终于解决了这个问题。您可以在可用模式属性中找到正确的屏幕大小。代码看起来像这样

for screenMode in secondScreen.availableModes {
    if screenMode.size.width != && screenMode.size.height != 0 {
        screenBounds.size = screenMode.size
        break
    }
}