首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SwiftUI的ReplayKit

使用SwiftUI的ReplayKit
EN

Stack Overflow用户
提问于 2020-01-21 21:55:37
回答 2查看 719关注 0票数 2

我想用ReplayKit录制屏幕。我用UIKit研究了这种方法。但是我的项目使用的是SwiftUI,所以我想使用ReplayKit和SwiftUI来记录屏幕。

如何使用SwiftUI录制屏幕?

-

当我使用stopRecording函数时,该函数将具有previewViewController。但是我不能调用present函数来呈现previewViewController。

EN

回答 2

Stack Overflow用户

发布于 2020-07-05 01:51:27

注意:这不是一个非常实用的答案。

在大多数情况下,"SwiftUI.View“运行在"UIHostingController”之上。你需要抓住这个来呈现"RPPreviewViewController“。你可以通过"UIApplication“找到它们中的一个。

代码语言:javascript
复制
let scene = UIApplication.shared.connectedScenes.first as! UIWindowScene
let viewController = scene.windows.last!.rootViewController
viewController.present(previewViewController, animated: true, completion:nil)
票数 0
EN

Stack Overflow用户

发布于 2021-09-01 03:57:05

我刚刚开源了一个使用SwiftUI的简单ReplayKit应用程序。

https://github.com/snakajima/ReplayStartUpKit

请看一下它是如何呈现来自SwiftUI的RPBroadcastActivityViewController的。

它首先将指向控制器的指针存储在一个属性bavController中,然后设置@Pubilshed属性activePopup以启动SwiftUI更改。

代码语言:javascript
复制
RPBroadcastActivityViewController.load { controller, error in
    if let controller = controller {
        self.bavController = controller
        controller.delegate = self
        self.activePopup = .broadCast
    }
}

在SwiftUI (MainUIView.swift)中,当属性activePopup变为.broadCast时,将激活以下视图。

代码语言:javascript
复制
.sheet(item: $state.activePopup) { item in
    switch(item) {
    case .broadCast:
        BroadcastActivityController(controller: state.bavController!)
    }
}

由于iPad的变通方法,BroadcastActivityController有点长,但它只是RPBroadcastActivityController的包装器。

代码语言:javascript
复制
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的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59842682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档