我正在寻求有关基于 Objective-C 的 iOS 应用程序中的性能问题的帮助。
我有一个使用 CALayer 的 renderInContext 方法捕获屏幕内容的 iOS 应用程序。它尝试捕获足够的屏幕帧以使用 AVFoundation 创建视频。然后将屏幕记录与其他元素结合起来,用于可用性研究。在捕获屏幕时,应用程序还可能正在显示 UIWebView 的内容、通过网络获取数据等... Web 视图的内容不受我的控制 - 它是来自网络。
这个设置是有效的,但正如你想象的那样,它不是黄油般光滑的。由于该层必须在主线程上呈现,因此 UI 争用比我想要的要多。我想做的是设置一个 UI 的响应优先于屏幕截图的设置。例如,如果用户正在滚动 Web 视图,我宁愿在记录上丢帧,也不愿有糟糕的滚动体验。
我已经尝试了几种技术,从 dispatch_source 合并到将帧捕获请求作为块提交到主队列到 CADisplayLink。到目前为止,它们的表现似乎都差不多。当前正在屏幕主视图的 drawRect 中触发帧捕获。
我在这里要问的是:鉴于上述情况,您建议我尝试哪些技术来实现我的目标?我意识到答案可能是没有很好的答案......但我想尝试任何事情,无论听起来多么古怪。
注意:任何技术都需要 App Store 友好。不能使用 Display Recorder 使用/使用的 CoreSurface hack 之类的东西。
谢谢你的帮助!