ios17点击查看图片崩溃
Description
调用方法 YBIBImageData *ybData = [YBIBImageData new]; ybData.imageURL = [NSURL URLWithString:urlString]; ybData.projectiveView = nil; YBImageBrowser *browser = [YBImageBrowser new]; browser.dataSourceArray = @[ybData]; browser.currentPage = 0; [browser show];
崩溃的地方 UIImage *YBIBSnapshotView(UIView *view) { UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, [UIScreen mainScreen].scale); [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }
建议: UIImage *YBIBSnapshotView(UIView *view) { //这里加上 if(![view isKindOfClass:UIView.class] || view.bounds.size.width<=1||view.bounds.size.height<=1){ return UIImage.new; } UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, [UIScreen mainScreen].scale); [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }
Environment
- YBImageBrowser version:3.0.9
- iOS version:ios17
建议把这个方法改成下面这样
UIImage *YBIBSnapshotView(UIView *view) {
if (@available(iOS 10.0, *)) {
UIGraphicsImageRendererFormat *format = [[UIGraphicsImageRendererFormat alloc] init];
format.scale = [UIScreen mainScreen].scale;
format.opaque = YES;
UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:view.bounds.size format:format];
UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull context) {
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
}];
return image;
} else {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, [UIScreen mainScreen].scale);
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
}
有用
建议把这个方法改成下面这样
UIImage *YBIBSnapshotView(UIView *view) { if (@available(iOS 10.0, *)) { UIGraphicsImageRendererFormat *format = [[UIGraphicsImageRendererFormat alloc] init]; format.scale = [UIScreen mainScreen].scale; format.opaque = YES; UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:view.bounds.size format:format]; UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull context) { [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; }]; return image; } else { UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, [UIScreen mainScreen].scale); [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } }
👍