我正在我的 iPhone/iPad 应用程序中实现一项功能,当 iPhone 连接到外部显示器时,iPhone 充当控制器,外部显示器显示非交互式视图。我正在使用 SwiftUI。
\n我的应用程序实际上与 Apple 文档中的概念非常相似。iPhone/iPad 将始终用作控制器,而外部显示器将始终显示内容,就 Apple 而言,是游戏。因此,将游戏镜像到 QuickTime 或 StreamLabs 时,需要镜像实际游戏,而不是控制器。这是我在 Apple 文档中讨论的示例,以便您可以直观地看到它。
\n\n以下是我SceneDelegate按照 Apple文档在 中实现它的方法。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {\n guard let windowScene = scene as? UIWindowScene else { return }\n if session.role == .windowApplication {\n let window = UIWindow(windowScene: windowScene)\n window.rootViewController = UIHostingController(rootView: ContentView())\n window.makeKeyAndVisible()\n }\n \n if session.role == .windowExternalDisplayNonInteractive {\n let window = UIWindow(windowScene: windowScene)\n window.rootViewController = UIHostingController(rootView: ExternalView())\n window.makeKeyAndVisible()\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n其中,当然ContentView应该是在iPhone上显示,而ExternalView在外接显示器或QuickTime上显示。info.plist如果这与您相关的话,这是我的条目。
好的,这在大多数情况下都可以正常工作,例如使用 AirPlay 将屏幕从 iPhone 镜像到电视时。两个视图均正确显示。不过,我遇到的问题是,在某些情况下,例如尝试使用 iPhone 作为源在 QuickTime 中录制电影,或者将 iPhone 添加为 StreamLabs(iPhone 屏幕)中的视频捕获设备(与ContentView) 被镜像,而不是显示ExternalView. 使用这些应用程序时需要ExternalView 显示。
查看时UIApplication.shared.openSessions,仅列出一个会话,如下所述
\xe2\x96\xbf 1 member\n - <UISceneSession: 0x283594ac0; role: UIWindowSceneSessionRoleApplication; persistentIdentifier: ED82F2B9-17EC-435F-8E20-439CECCA92F6> {\n scene = <UIWindowScene: 0x117d051e0>;\n configuration = <UISceneConfiguration: 0x283595cc0; name: ContentView; role: UIWindowSceneSessionRoleApplication> {\n sceneClass = 0x0;\n delegateClass = SwiftUI.AppSceneDelegate;\n storyboard = 0x0;\n };\n} #0\n - super: NSObject\nRun Code Online (Sandbox Code Playgroud)\n有没有办法“创建”新的屏幕镜像会话?我开始担心像 QuickTime 和 StreamLabs 这样的应用程序不可能实现这一点,而且我也无法解决这个问题。
\n无论如何,如果您对这个问题有任何解决方案,我将非常感谢任何反馈。
\n| 归档时间: |
|
| 查看次数: |
472 次 |
| 最近记录: |