Более быстрый способ, необходимый для визуализации иерархии UIView для изображения - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь создать видео с фрагментом пользовательского интерфейса моего приложения для iOS.Я не могу использовать API-интерфейсы записи экрана, потому что я не захватываю весь экран, а также я рендеринг в другое измерение, чем то, что отображается на экране.

В настоящее время я использую следующий код, которыйработает:

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

return image;

Затем я использую API-интерфейсы AVFoundation для кодирования видео.Итак, в чем проблема?

Это почти привязывает процессор.Он работает на 89% непрерывно на самом быстром из доступных на данный момент iPad (iPad Pro 11 "). В настоящее время скорость рендеринга составляет 3 FPS.

Узким местом является управление цветом. Я профилировалс инструментами, и все признаки указывают на то, что виновником является управление цветом Apple. И Apple не предоставляет нам возможности отключить управление цветом.

На iPad Air 2 платформы отключают управление цветом засцены, и код занимает 20% ЦП.

Что я пробовал

Я пытался создать CGBitmapContext самостоятельно и с использованием различных цветовых пространств, но безрезультатно.вместо этого попытался использовать [view.layer renderInContext:context];, но это не дает хороших результатов, оно не обрезает закадровые представления и не включает содержимое, отображаемое OpenGL.

НО ... Core Animationкажется, не выполняет управление цветом, и, как результат, работает намного лучше.

Цель

Я просто хочу, чтобы мои взгляды отображались на изображении достаточно эффективным способом.,Я возьму все, что смогу получить.Я что-то упускаю здесь?

...