2016-06-22 3 views
0

나는 지금 AVPlayerLayer를 표시하기 위해 AirPlay로 작업하고 있습니다. 여기에 내 코드의 조각입니다 :경계로 (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)을 경계로 사용하면 앱을 다시 시작하거나 현재보기 컨트롤러를 다시 초기화 할 때까지 올바른 경계를 다시 얻지 못할 것입니다. AirPlay 장치를 다시 시작하는 것은 도움이되지 않습니다.

외부 화면의 올바른 경계를 가져 오는 방법이 있습니까?

답변

0

좋아, 이제 마침내이 문제를 해결했습니다. 사용 가능한 모드 속성에서 올바른 화면 크기를 찾을 수 있습니다. 코드는 다음과 유사합니다.

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