YBImageBrowser icon indicating copy to clipboard operation
YBImageBrowser copied to clipboard

ios17点击查看图片崩溃

Open wydgithub opened this issue 1 year ago • 2 comments

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

wydgithub avatar Mar 07 '24 11:03 wydgithub

建议把这个方法改成下面这样

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;
    }
}

lifution avatar Mar 13 '24 16:03 lifution

有用

建议把这个方法改成下面这样

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;
    }
}

👍

yangxuefei18 avatar Mar 28 '24 02:03 yangxuefei18