【发布时间】:2016-10-25 02:27:13
【问题描述】:
我现在正在使用 AirPlay 来显示 AVPlayerLayer。这是我的代码的 sn-p:
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 设备似乎没有帮助。
有没有办法获得外部屏幕的正确边界?
【问题讨论】: