当我使用stopRecording函数时,该函数将具有previewViewController。但我无法调用present函数来显示previewViewController。
qxgroojn1#
注意:这不是一个非常实际的答案。在大多数情况下,“SwiftUI.View”运行在“UIHostingController”之上。你需要抓住这个来呈现“RPPreviewViewController”。你可以通过跟随“UIApplication”找到其中之一。
let scene = UIApplication.shared.connectedScenes.first as! UIWindowScene let viewController = scene.windows.last!.rootViewController viewController.present(previewViewController, animated: true, completion:nil)
iezvtpos2#
我刚刚开源了一个简单的ReplayKit应用程序,它使用SwiftUI。https://github.com/snakajima/ReplayStartUpKit请看一下它是如何从SwiftUI中呈现RPBBroadcastActivityViewController的。它首先将指向控制器的指针存储在属性bavController中,然后设置@Pubilshed属性activePopup以启动SwiftUI更改。
RPBroadcastActivityViewController.load { controller, error in if let controller = controller { self.bavController = controller controller.delegate = self self.activePopup = .broadCast } }
在SwiftUI(MainUIView.swift)中,当属性activePopup变为. broadcast时,将激活以下视图。
.sheet(item: $state.activePopup) { item in switch(item) { case .broadCast: BroadcastActivityController(controller: state.bavController!) } }
BroadcastActivityController有点长,因为iPad的工作区,但它只是RPBBroadcastActivityController的 Package 器。
struct BroadcastActivityController: UIViewControllerRepresentable { let controller: RPBroadcastActivityViewController func makeUIViewController(context: Context) -> RPBroadcastActivityViewController { return controller } func updateUIViewController(_ uiViewController: RPBroadcastActivityViewController, context: Context) { // Hack to work around iPad issue if UIDevice.current.userInterfaceIdiom == .pad { guard let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate, let vc = sceneDelegate.uiWindow?.rootViewController, let view = vc.view else { print("somethign is really wrong") return } controller.modalPresentationStyle = .popover if let popover = controller.popoverPresentationController { popover.sourceRect = CGRect(origin: .zero, size: CGSize(width: 10, height: 10)) popover.sourceView = view popover.permittedArrowDirections = [] } } } typealias UIViewControllerType = RPBroadcastActivityViewController }
您需要执行与previewViewController非常相似的操作。
2条答案
按热度按时间qxgroojn1#
注意:这不是一个非常实际的答案。
在大多数情况下,“SwiftUI.View”运行在“UIHostingController”之上。你需要抓住这个来呈现“RPPreviewViewController”。你可以通过跟随“UIApplication”找到其中之一。
iezvtpos2#
我刚刚开源了一个简单的ReplayKit应用程序,它使用SwiftUI。
https://github.com/snakajima/ReplayStartUpKit
请看一下它是如何从SwiftUI中呈现RPBBroadcastActivityViewController的。
它首先将指向控制器的指针存储在属性bavController中,然后设置@Pubilshed属性activePopup以启动SwiftUI更改。
在SwiftUI(MainUIView.swift)中,当属性activePopup变为. broadcast时,将激活以下视图。
BroadcastActivityController有点长,因为iPad的工作区,但它只是RPBBroadcastActivityController的 Package 器。
您需要执行与previewViewController非常相似的操作。