gpt4 book ai didi

iOS13 外屏镜像,出现错误 : setScreen should not be called

转载 作者:行者123 更新时间:2023-12-01 15:44:25 27 4
gpt4 key购买 nike

我正在尝试在 iOS 13 中向外部连接的屏幕呈现自定义 View Controller 。我遵循了本教程:

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
}

externalWindow!.screen = screen 行中,我在 Xcode 11.4.1 控制台中收到错误消息:

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

自定义 View Controller 不会出现在外部显示器中。

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

最佳答案

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

private func setupExternalScreen(screen: UIScreen, shouldRecurse: Bool = true) {
// For iOS13 find matching UIWindowScene
var matchingWindowScene: UIWindowScene? = nil
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) {
matchingWindowScene = windowScene
break
}
}
}
if matchingWindowScene == nil {
// UIWindowScene has not been created by iOS rendered yet
// Lets recall self after delay of two seconds
if true == shouldRecurse {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {
self.setupExternalScreen(screen:screen, shouldRecurse: false)
}
}
// Dont proceed furthure in iOS13
return
}
}

guard externalWindow == nil, let vc = self.storyboard?.instantiateViewControllerWithIdentifier("ExternalScreen") as? ExternalScreenViewController else {
return
}

externalWindow = UIWindow(frame: screen.bounds)
externalWindow!.rootViewController = vc
if #available(iOS 13.0, *) {
// Set windowScene here, no need to set screen
externalWindow!.windowScene = matchingWindowScene
} else {
// Set screen the traditional way
externalWindow!.screen = screen
}
externalWindow!.isHidden = false

}

注意:我们应该设置 isHidden,因为 hidden 已被弃用。

关于iOS13 外屏镜像,出现错误 : setScreen should not be called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61471738/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com