2016-11-04 5 views
1

Я использую следующий код, чтобы получить снимок экрана моего представления.drawHierarchy не работает, когда afterScreenUpdates: true

UIGraphicsBeginImageContext(self.view.bounds.size) 
self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: true) 
let wholeImage = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

Если я устанавливаю значение «afterScreenUpdates:» в false, он работает правильно. Но если установить его так, я получаю следующее сообщение об ошибке:

*** Assertion failure in -[UIApplication _performWithUICACommitStateSnapshotting:](), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3600.5.2/UIApplication.m:6882 

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

Странное примечание стороны: приложение зависает с этой ошибкой, но нет жесткой остановки (я не могу взаимодействовать с отладчиком, чтобы посмотреть на обратную трассировку). Извините, если это неясно.

ответ

1

У меня тоже есть эта ошибка. Проблема в том, что вся работа UIKit в iOS должна выполняться в основном потоке. Быстрое решение заключается в том, чтобы обернуть его вызовом DispatchQueue.async из основного потока:

var wholeImage : UIImage? 

DispatchQueue.main.async { 
    UIGraphicsBeginImageContext(self.view.bounds.size) 
    self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: true) 
    self.wholeImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^