Как сделать скриншот UIView в фоновом потоке? - PullRequest
0 голосов
/ 02 октября 2018

Приложение, над которым я работаю, имеет карты Google почти на каждом экране.Чтобы сэкономить память, я везде использую один и тот же вид карт Google.Проблема в том, что когда вы открываете viewController, вы можете увидеть пустое пространство, где была карта.Чтобы обойти это, я делаю скриншоты и добавляю в качестве фона перед удалением карты.Но есть и другая проблема: на iPhoneX снимок экрана занимает около 0,3 секунды (я полагаю, на старых телефонах он еще хуже).Есть ли способ сделать скриншоты UIView в фоновом потоке?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

На самом деле, это возможно!Но сначала на UIThread вам нужно получить некоторую информацию, например:

CALayer* layer = view.layer;
CGRect frame = view.frame;

, затем перейдите на backgroundthead, используйте приведенные ниже коды для получения изображения:

UIGraphicsBeginImageContextWithOptions(frame.size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
0 голосов
/ 02 октября 2018

Из UIKit документация

Используйте классы UIKit только из основного потока вашего приложения или основной очереди отправки, если не указано иное.Это ограничение особенно применимо к классам, производным от UIResponder или связанным с манипулированием пользовательским интерфейсом приложения.используя метод UIKit.

...