关于renderInContext造成的crash问题,在ios8上crash概率还是比较大的,目前以下方式没什么问题,已通过性能测试,无多大影响。
afterScreenUpdates参数为YES时,如果有首次进入界面,默认有下拉刷新时,会造成类似卡帧的效果。
afterScreenUpdates为NO有弹窗时,侧滑返回有部分空白,可能截屏还没完成就已经返回了。
故建议做版本限制,只能避免iOS8大面积的crash,根本上还是没有解决,其它系统仍然有概率crash。
- (UIImage *)capture {
if (CGRectIsEmpty(TOP_VIEW.frame)) {
return nil;
}
//renderInContext该方法为渲染view.layer,此方法容易造成内存暴涨。
UIGraphicsBeginImageContextWithOptions(view.bounds.size,view.opaque, 0.0);
// [view.layer renderInContext:UIGraphicsGetCurrentContext()];
if ([view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
BOOL isComplate = [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
}else{
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
}
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
网友评论