【问题标题】:AirPlay external screen returning (0, 0, 0, 0) as boundsAirPlay 外屏返回 (0, 0, 0, 0) 作为边界
【发布时间】: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 设备似乎没有帮助。

有没有办法获得外部屏幕的正确边界?

【问题讨论】:

    标签: ios swift airplay


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      相关资源
      最近更新 更多