如何以编程方式录制IOS屏幕

2024-02-26

有没有办法以编程方式录制 IOS 屏幕?意味着您正在执行的任何活动,例如单击按钮、滚动表格视图。

即使正在播放的视频会与其他活动一起再次捕获?

尝试过这些

  1. https://www.raywenderlich.com/30200/avfoundation-tutorial-adding-overlays-and-animations-to-videos https://www.raywenderlich.com/30200/avfoundation-tutorial-adding-overlays-and-animations-to-videos
  2. https://github.com/alskipp/ASScreenRecorder https://github.com/alskipp/ASScreenRecorder

但这些库不会提供高质量的视频。我需要高质量的视频。

问题是,当我捕获屏幕时在后台播放视频时,它不会显示流畅的视频。它显示一帧视频,然后 3-4 秒后显示第二帧,依此类推。而且视频质量不好,很模糊


从 iOS 9 开始,ReplayKit 似乎可以大大简化这一过程。

https://developer.apple.com/reference/replaykit https://developer.apple.com/reference/replaykit

https://code.tutsplus.com/tutorials/ios-9-an-introduction-to-replaykit--cms-25458 https://code.tutsplus.com/tutorials/ios-9-an-introduction-to-replaykit--cms-25458

Update:既然 iOS 11 有内置的屏幕录像机,这可能不太相关,但以下内容Swift 3代码对我有用:

import ReplayKit

@IBAction func toggleRecording(_ sender: UIBarButtonItem) {
    let r = RPScreenRecorder.shared()

    guard r.isAvailable else {
        print("ReplayKit unavailable")
        return
    }
    
    if r.isRecording {
        self.stopRecording(sender, r)
        
    }
    else {
        self.startRecording(sender, r)
    }
}

func startRecording(_ sender: UIBarButtonItem, _ r: RPScreenRecorder) {
    
    r.startRecording(handler: { (error: Error?) -> Void in
        if error == nil { // Recording has started
            sender.title = "Stop"
        } else {
            // Handle error
            print(error?.localizedDescription ?? "Unknown error")
        }
    })
}

func stopRecording(_ sender: UIBarButtonItem, _ r: RPScreenRecorder) {
    r.stopRecording( handler: { previewViewController, error in

        sender.title = "Record"
        
        if let pvc = previewViewController {

            if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.pad {
                pvc.modalPresentationStyle = UIModalPresentationStyle.popover
                pvc.popoverPresentationController?.sourceRect = CGRect.zero
                pvc.popoverPresentationController?.sourceView = self.view
            }

            pvc.previewControllerDelegate = self
            self.present(pvc, animated: true, completion: nil)
        }
        else if let error = error {
            print(error.localizedDescription)
        }
        
    })
}

// MARK: RPPreviewViewControllerDelegate
func previewControllerDidFinish(_ previewController: RPPreviewViewController) {
    previewController.dismiss(animated: true, completion: nil)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式录制IOS屏幕 的相关文章

  • Android - API 请求

    我开发了一个应用程序 它也在 iPhone 上 问题出在 api 请求上 我为所有请求设置了超时 有时会出现 30 60 秒的中断 看起来这个应用程序执行了几个请求 然后就中断了 一直超时 大约 45 秒后一切正常 不知道是服务器问题还是安
  • Apple Silicon M1 Mac 中的 Xcode 错误“为 iOS 模拟器构建,但在为 iOS 构建的 dylib .. for 架构 arm64”中链接

    我有一个应用程序 可以在物理设备和 iOS 模拟器中使用英特尔处理器的旧 Mac 上编译和运行良好 同样的应用程序也可以在配备 M1 处理器的较新 Apple Silicon Mac 上编译并正常运行physicaliPhone 设备 bu
  • 如何在 SQLite 中替换字符串?

    如何更新具有以下内容的表列 var mobile 233KKFSDK3234 Documents Page jpg 并将其替换为 Documents Page jpg 在 SQLite 中 注意 所有文字 除了 Documents 是动态的
  • 检查系统时间是自动还是用户设置

    我需要在当前的项目中设置用户证明时间 我围绕这个问题发现了很多不同的问题 但似乎没有一个问题有我正在寻找的答案 这些是我到目前为止看过的问题 XCODE 如何从设备获取 验证准确的时间戳 https stackoverflow com qu
  • SwiftUI - 预览时未知的预览提供程序“ContentView_Previews_”。发生在一个全新的项目中

    我有这个简单的观点 import SwiftUI struct ContentView View var body some View Text Hello struct ContentView Previews PreviewProvid
  • 有没有办法阻止 iOS 上的 Safari 在关闭时清除网站的 cookie?

    我的移动网络应用程序的一位用户抱怨说 每次他关闭手机屏幕后使用该应用程序时 他都必须重新登录该应用程序 发生的情况是 当屏幕关闭时 或者当您通过双击主页按钮并滑开 Safari 来完全关闭 Safari 时 Safari 会清除该网站的 C
  • 仅在 iPhone X 上显示状态栏

    如果不是 iPhone X 则希望隐藏状态栏 如果是 iPhone X 则希望显示状态栏 这很可能必须以编程方式完成 因为 plist 中没有支持此功能的键 我发现的最接近的一个是UIStatusBarHidden 方法一 You have
  • NSOperation 中委托的使用

    我正在尝试利用CLLocationManager in an NSOperation 作为其中的一部分 我需要能够startUpdatingLocation然后等到收到 CLLocation 后才完成操作 目前我已经完成了以下操作 但是委托
  • 在 UITextView 上添加具有自定义间距和文本的图像

    I want to add Image on text view and want proper spacing as shown in screenshot 我尝试在文本视图上添加图像 但在根据要求放置文本时遇到问题 请向我提供有关同样的
  • 核心数据:为什么必须调用重新加载数据才能使我的应用程序运行?

    我花了整个晚上调试一个简单的应用程序 该应用程序从网络检索一张图像 是的 是的 旨在让我的生活更轻松 并将其显示在表格视图中 我这样做是为了练习学习核心数据 在我修复它之前 错误消息显示如下 2012 09 30 06 16 12 854
  • ios Vision VNImageRequestHandler方向问题

    我正在尝试使用相机通过相机检测脸部VNImageRequestHandler iOS 愿景 当我在横向模式下用相机指向照片时 它会检测到面部 但方向模式相反 let detectFaceRequestHandler VNImageReque
  • 如何在 Swift Playgrounds 中获得弹出对话框

    我想知道如何在 Swift 中弹出一个对话框游乐场 是的 必须在 Playgrounds 中 我尝试了以下代码 直接来自 AppleDevs 站点 然而 无论我如何尝试 self tag always抛出错误 谁能帮我这个 import U
  • iOS NSURLSession,如何在didCompleteWithError中重试

    我想在我的服务器上尝试一次调用 直到成功为止 我想每 30 秒尝试一次 所以我使用 NSURLSession 进行通话 NSURLSessionDownloadTask task self session downloadTaskWithR
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • UITextView:内存使用量巨大

    我在 UITextView 中遇到了内存使用过多的问题 我正在将 50Kb ascii 文本文件加载到 NSString 中 并将其分配给应用程序中空 UITextView 组件的 text 属性 这立即使我的内存占用量增加了 100Mb
  • Xcode 在代码签名身份中看不到我的开发人员证书

    我续订了 IOS 开发人员证书 从钥匙串中删除了旧证书 然后单击了我的证书 钥匙串中的一切看起来都很正常 我有分发 开发人员 WWDC 证书 每个配置文件看起来都有效 并带有绿色标记 在组织器中的团队和配置文件部分下 但在代码签名身份下的
  • Swift 中的 viewWillLayoutSubviews

    我正在尝试翻译SKScene scene GameScene sceneWithSize skView bounds size 进入 swift 但我收到错误 sceneWithSize 不可用 使用对象构造 SKScene size 我在
  • 快速钥匙串更新只有在第二次尝试时才起作用

    您好 我在更新存储在钥匙串中的登录信息方面遇到了 iOS 钥匙串的一个非常奇怪的问题 因此 如果没有保存的凭据 则正确运行保存函数会保存登录信息 如果登录信息已存在并且用户更新了密码 则更新功能仅正确更新密码 但是 如果登录信息存在并且我尝
  • 使用 nib 作为带有 nib 类的表节标题

    我想创建一个加载 nib 文件并将其设置为标题 UIView 的节标题 这个 nib 文件还将有一个关联的类 其中插座和操作连接到 因此我想像平常一样使用 nib 加载该类 我在网上搜索并找到了几个类似的答案 但我找不到任何适合我的答案 经
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何

随机推荐

  • 如何访问 Tumblr API 照片数据源(即所有照片、整个档案)?

    我目前正在用 PHP 开发一个项目 该项目通过 Tumblr API 使用我的 api key 连接到 Tumblr 照片博客 以访问指定 Tumblr 照片博客中发布的照片 我使用 Tumblr API 文档开始 并交叉引用了许多网站 包
  • 您可以使用 JavaScript 将多个图像合并为一个图像吗?

    我想知道是否有一种方法可以仅使用 JavaScript 将多个图像组合成单个图像 这是 Canvas 能够做到的吗 效果可以通过定位来完成 但是可以将它们组合成单个图像进行下载吗 2008 年 10 月 1 日更新 感谢您的建议 我正在帮助
  • 使用 UIViewAnimationOptionTransitionCurlDown 自定义 Segue

    我想创建一个自定义 Segue 来用卷曲动画交换 ViewController 但我找不到方法 void 执行此操作会是什么 我有这个 void perform UIViewController dst self destinationVi
  • 为什么 AudioRecord.getMinBufferSize 返回 ERROR_BAD_VALUE (-2)?

    我正在 Samsung Galaxy S i9000 上对此进行测试 int sampleRate 44100 int bufferSize AudioRecord getMinBufferSize sampleRate AudioForm
  • JSON-lib 转义/保留字符串

    我正在使用 Java 的 JSON lib 库http json lib sourceforge net http json lib sourceforge net 我只想添加看起来像 JSON 的简单字符串 但我不希望库自动找出它可能是
  • 使用“全选”时排除禁用的复选框

    我在表中有带有标签的复选框 我在表 全选 之外添加了一个复选框 ID 为 chkbox 现在下面的代码工作正常 这是 选择和取消选择表中的所有复选框 现在有一些页面由于业务逻辑而禁用了一些复选框 我希望这些复选框不应该受到影响
  • Java 创建一个新文件,或者覆盖现有文件

    我想要实现的是创建一个文件 无论该文件是否存在 我尝试使用File createNewFile 但这只会创建该文件 如果该文件尚不存在 我应该使用File delete 进而File createNewFile 或者有更清晰的方法吗 Fil
  • 如何让工具提示在 IE 中显示时间更长

    我得到以下内容 span title 在 Firefox 中 工具提示会一直停留在那里 直到鼠标移动 但在 IS 中 它只停留大约 5 秒 然后消失 有没有办法让它持续更久 没有内置的浏览器工具提示 不 有大量类似工具提示的 UI 组件使用
  • 关于jsp源代码

    我开发了一个非常大的 Web 应用程序 如果我需要在 JSP 页面中进行任何更改 则需要花费太多时间来查找 JSP 页面 链接 操作等 那么 是否有任何工具或技术可以让我直接获取该特定 JSP 页面的代码 我认为 查看来源 是不同的 它只显
  • Hibernate:无法反序列化 - 无效的流标头

    关于如何解决此错误有什么想法吗 我将 Spring JPA 与 Hibernate 一起使用 下面是必要的详细信息 实体类别1 Entity Table name ways TypeDef name hstore typeClass Hst
  • 如何在 Android 的 TabLayout 中使选项卡标题向左对齐

    我似乎无法在 TabLayout 内将选项卡标题向左对齐 目前 标题居中 这是什么I want https i stack imgur com Vy6FP jpg实现 这就是I have https i stack imgur com FY
  • 从 c# 中的 app.config 获取 ConnectionString [重复]

    这个问题在这里已经有答案了 我已经在 app config 文件中定义了我的连接字符串
  • WPF 以编程方式实例化用户控件以将其呈现为 PNG

    我想在 DLL 中以编程方式实例化用户控件 然后将其保存为 PNG 文件 这对于PngBitmapEncoder和RenderTargetBitmap来说一般是没有问题的 这是我的问题 如何实例化该控件 简单地使用 new operator
  • Pandas 将零替换为最接近的平均非零值

    我有一个数据框 df pd DataFrame A 0 0 15 0 0 12 0 0 0 5 我想用最接近的非零值替换 0 值 比如第一个值是0 那么我发现最接近的非零值是15 所以我把它替换为15 那么数据就变成了 15 0 15 0
  • 即使存在未设置为 true,Rails 验证也需要数字

    我正在尝试保存一条没有设置字段的记录 该记录在模型中具有验证数值 即使验证中不需要存在 它仍然会抛出该字段不是数字的错误 验证 validates network id numericality gt true 保存模型的代码 networ
  • 在实现 ArrayAccess 和 Iterator 的对象上使用 foreach

    有没有办法迭代实现 ArrayAccess 和 Iterator 接口的对象的键 数组访问很有魅力 但我不能在那些对象上使用 foreach 这对我有很大帮助 是否可以 到目前为止我有这样的代码
  • 如何使用 xdist 和 django_coverage_plugin 并行 pytest 运行覆盖率报告

    使用以下设置 计算出的覆盖率小于使用没有并行化的单线程的覆盖率 Coverage 仅在项目根目录中创建 1 个覆盖文件 我预计这就是问题所在 我无法确定我做错了什么 报告的覆盖范围比我简单地运行要少coverage m pytest 在单线
  • 如何使用 Gmail API 访问我拥有的 Gmail 帐户?

    我想将节点脚本作为 cronjob 运行 它使用 Gmail 的 API 来轮询我拥有的 Gmail 帐户 我正在关注这些快速入门说明 https developers google com gmail api quickstart nod
  • JTabbedPane:选项卡左侧的图标

    你好 我正在使用 nimbus 外观和感觉 并有一个带有图标和文本的选项卡窗格 现在图标出现在文本的右侧 而我想将其放在左侧 我还想在图标和文本之间添加一些间距 thanks tab组件需要自己设置 它控制选项卡标题的呈现方式 Create
  • 如何以编程方式录制IOS屏幕

    有没有办法以编程方式录制 IOS 屏幕 意味着您正在执行的任何活动 例如单击按钮 滚动表格视图 即使正在播放的视频会与其他活动一起再次捕获 尝试过这些 https www raywenderlich com 30200 avfoundati