如何在保持UI响应的同时以可接受的性能记录屏幕?

Hun*_*ter 9 iphone core-graphics avfoundation ipad ios

我正在寻找基于Objective-C的iOS应用程序中的性能问题的帮助.

我有一个iOS应用程序,使用CALayer的renderInContext方法捕获屏幕的内容.它尝试捕获足够的屏幕帧以使用AVFoundation创建视频.然后将屏幕记录与其他元素组合以用于可用性的研究目的.在捕获屏幕时,应用程序也可能正在显示UIWebView的内容,通过网络外出以获取数据等...... Web视图的内容不受我的控制 - 它是来自的任意内容网页.

这个设置正在运行,但正如您可能想象的那样,它并非如此顺畅.由于图层必须在主线程上呈现,因此UI争用比我想要的多.我想要做的是设置一个设置,其中UI的响应性优先于屏幕捕获.例如,如果用户正在滚动Web视图,我宁愿丢弃录制中的帧而不是可怕的滚动体验.

我已经尝试了几种技术,从dispatch_source合并到将帧捕获请求作为块提交到主队列到CADisplayLink.到目前为止,他们似乎都表现得差不多.帧捕获当前正在屏幕主视图的drawRect中触发.

我在这里问的是:鉴于上述情况,您会建议我尝试实现目标的技巧是什么?我意识到答案可能是没有很好的答案......但我想尝试任何事情,不管它听起来多么古怪.

注意:无论什么技术需要App Store友好.不能使用Display Recorder使用/使用的CoreSurface hack之类的东西.

谢谢你的帮助!

Den*_*cik 1

“因为图层必须在主线程上渲染”,只要您不接触 UIKit,这就是不正确的。

请参阅/sf/answers/899092001/