2016-06-22 18 views
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デバイスを再起動することは役に立ちません。

外部画面の正しい範囲を取得する方法はありますか?

答えて

0

私はついにこれを解決しました。使用可能なモードのプロパティの中で正しい画面サイズを見つけることができます。コードは次のようになります

for screenMode in secondScreen.availableModes { 
    if screenMode.size.width != && screenMode.size.height != 0 { 
     screenBounds.size = screenMode.size 
     break 
    } 
} 
関連する問題