0
私は現在、AirPlayを使ってAVPlayerLayerを表示しています。ここに私のコードの抜粋です:境界として(0、0、0、0)を返すAirPlay外部画面
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)を1回でも取得した場合は、アプリケーションを再起動するか、現在のビューコントローラを再初期化するまで、決して正しい境界を取得しません。 AirPlayデバイスを再起動することは役に立ちません。
外部画面の正しい範囲を取得する方法はありますか?