我正在尝试使用以下方法截取我UIView
的屏幕截图。它只有在我不尝试在“背景”中执行此操作时才有效。但我需要它在背景中,因为每次它发射,我都有可怕的责任 - 没有任何作用几秒钟。
此方法有效,但当我暂停时,它会永久停留,并显示mach_msg_trap
消息。
-(void)takeShoot{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
float height;
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if(orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight){
height = 600;
}else{
height = 500;
}
UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.view.frame.size.width, height), YES, 0.6);
[self.view drawViewHierarchyInRect:CGRectMake(0, -60, self.view.frame.size.width, self.view.frame.size.height) afterScreenUpdates:YES];
self.sharedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
});
}
当我在NSOperation
开火时,它变得更糟 - 只是不会没有任何理由这样做。
第三种方法performSelectorInBackground
只是垃圾,如果我每次uiwebview
完成加载时都会触发它,那么就会有数十亿个线程,而我认为它根本就不好。
那么,我怎样才能在后台(不在mainThread
上)进行排版,而不是杀死或冻结任何人?
答案 0 :(得分:0)
您必须在主线程上截取屏幕截图。这是UI稳定的唯一线程。
如果您有几秒钟的问题,我怀疑您还有其他问题,这只是暴露。最有可能是你在后台线程上进行的其他UIKit调用。这不受支持,会导致您描述的症状。