iOS13外部屏幕镜像,出现“不应调用setScreen”错误

问题描述 投票:1回答:1

我正在尝试将自定义视图控制器呈现给iOS 13中的外部连接屏幕。我遵循了本教程:

http://www.spazstik-software.com/blog/article/how-to-display-custom-content-on-a-external-screen-from-a-ios-device

我有以下代码:

/// A private method used to setup a external screen with a window
/// loaded with a ExternalScreenViewController
///
/// - parameter screen: A UIScreen object to connect the
/// ExternalScreenViewController too
private func setupExternalScreen(screen: UIScreen) {
  guard externalWindow == nil,
    let vc = self.storyboard?.instantiateViewControllerWithIdentifier("ExternalScreen") as? ExternalScreenViewController else {
      return
  }

  externalWindow = UIWindow(frame: screen.bounds)
  externalWindow!.rootViewController = vc
  externalWindow!.screen = screen
  externalWindow!.hidden = false
}

在[C0行中,我在Xcode 11.4.1控制台中收到错误:

[Assert] UIKit客户端中的错误:如果客户端采用UIScene生命周期,则不应调用-[UIWindow setScreen:]。调用-[UIWindow setWindowScene:]。

自定义视图控制器未显示在外部显示器中。

我应该改变什么?我想同时处理iOS 13.x和以前的设备。

ios ios13 swift5 airplay
1个回答
0
投票

[在iOS 13设备中,不要设置externalWindow!.screen = screen,而应在screen对象上设置windowScene。在此之前,您应该从externalWindow的连接场景中找出匹配的windowScene。修改后的方法如下:

UIApplication

注意:我们建议将private func setupExternalScreen(screen: UIScreen) { guard externalWindow == nil, let vc = self.storyboard?.instantiateViewControllerWithIdentifier("ExternalScreen") as? ExternalScreenViewController else { return } externalWindow = UIWindow(frame: screen.bounds) externalWindow!.rootViewController = vc var sceneHasBeenSet = false if #available(iOS 13.0, *) { let scenes = UIApplication.shared.connectedScenes for aScene in scenes { if let windowScene = aScene as? UIWindowScene { // Look for UIWindowScene that has matching screen if (windowScene.screen == screen) { // Set windowScene here, no need to set screen externalWindow!.windowScene = windowScene sceneHasBeenSet = true } } } } if false == sceneHasBeenSet { // Set screen the traditional way externalWindow!.screen = screen } externalWindow!.isHidden = false } 设置为不推荐使用isHidden

© www.soinside.com 2019 - 2024. All rights reserved.