我使用以下代码来获取我的视图的屏幕截图。
UIGraphicsBeginImageContext(self.view.bounds.size)
self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: true)
let wholeImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
如果我设置" afterScreenUpdates:"为假,它正常工作。但如果我将其设置为true,我会收到以下错误:
*** Assertion failure in -[UIApplication _performWithUICACommitStateSnapshotting:](), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3600.5.2/UIApplication.m:6882
使用断点,我发现错误抛出了drawHierarchy方法。有没有人见过这个错误?知道发生了什么事吗?在抓取快照之前,我尝试取消对视图的任何更新(隐藏一些uiimages),但它没有任何效果。
奇怪的旁注:应用程序冻结此错误,但没有硬停止(我无法与调试器交互以查看回溯)。对不起,如果不清楚的话。
答案 0 :(得分:3)
我也遇到了这个错误。问题是iOS中的所有UIKit工作都需要在主线程上完成。一个快速的解决方案是将它包装在主线程的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()
}