我想用ReplayKit录制屏幕。我用UIKit研究了这种方法。但是我的项目使用的是SwiftUI,所以我想使用ReplayKit和SwiftUI来记录屏幕。
如何使用SwiftUI录制屏幕?
-
当我使用stopRecording函数时,该函数将具有previewViewController。但是我不能调用present函数来呈现previewViewController。
发布于 2020-07-05 01:51:27
注意:这不是一个非常实用的答案。
在大多数情况下,"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)发布于 2021-09-01 03:57:05
我刚刚开源了一个使用SwiftUI的简单ReplayKit应用程序。
https://github.com/snakajima/ReplayStartUpKit
请看一下它是如何呈现来自SwiftUI的RPBroadcastActivityViewController的。
它首先将指向控制器的指针存储在一个属性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!)
}
}由于iPad的变通方法,BroadcastActivityController有点长,但它只是RPBroadcastActivityController的包装器。
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的事情。
https://stackoverflow.com/questions/59842682
复制相似问题