将UIView层次结构呈现到图像所需的更快方法

时间:2019-01-18 17:39:03

标签: ios objective-c uikit core-graphics

我正在尝试制作一部分iOS应用UI的视频。我无法使用屏幕录制API,因为我无法捕获整个屏幕,而且渲染的尺寸与屏幕上显示的尺寸不同。

我当前正在使用以下代码,该代码有效:

UIGraphicsBeginImageContextWithOptions(outlineFrame.size, YES, 1.0);
[view drawViewHierarchyInRect:self.outline.frame afterScreenUpdates:NO];
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return image;

然后我使用AVFoundation API对视频进行编码。那怎么了?

几乎钉住了CPU。在目前可用的最快iPad(iPad Pro 11”)上,它连续以89%的速度运行。我目前的渲染速度为3 FPS。

瓶颈是色彩管理。我已经介绍了各种仪器,所有迹象都表明苹果是色彩管理的元凶。而且,Apple无法为我们提供关闭色彩管理的方法。

在iPad Air 2上,框架禁用了幕后的色彩管理,并且代码占用了20%的CPU。

我尝试过的

我尝试自己创建CGBitmapContext并使用不同的颜色空间,但无济于事。我尝试使用[view.layer renderInContext:context];代替,但是效果不佳。它不剪切屏幕外的视图,也不包含OpenGL渲染的内容。

但是... Core Animation似乎不执行颜色管理,因此效果要​​好得多。

目标

我只希望以合理有效的方式将视图呈现到图像。我会尽我所能。这里有我想念的东西吗?

0 个答案:

没有答案