将UIVIew转换为UIImage而不显示/显示UIView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将UIVIew转换为UIImage而不显示/显示UIView相关的知识,希望对你有一定的参考价值。

我正在使用方法将UIView转换为UIImage,当UIView(要转换为UIImage)已经存在/显示时,它做得很好。但我的要求是将UIView转换为UIImage而不显示UIView。不幸的是,这个代码在这种情况下失败了,我被困住了。任何帮助将不胜感激。

我使用以下方法:

+ (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque,     [[UIScreen mainScreen] scale]); 
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}
答案

您的代码可能会失败,因为您没有布置视图的子视图(当您将视图添加为子视图时会自动完成)。尝试类似我在下面写的方法:

+ (UIImage *)imageFromView:(UIView *)view sized:(CGSize)size
{
    // layout the view
    view.frame = CGRectMake(0, 0, size.width, size.height);
    [view setNeedsLayout];
    [view layoutIfNeeded];

    // render the image
    UIGraphicsBeginImageContextWithOptions(size, view.opaque, 0.0f);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
    UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return renderedImage;
}
另一答案

假设你已经有了一个工作视图,这段代码应该可以将UIView转换为UIImage(我用它来将渐变转换为图像并将图像显示在UIProgressView上。

迅速:

let renderer = UIGraphicsImageRenderer(size: gradientView.bounds.size)
let image = renderer.image { ctx in
            gradientView.drawHierarchy(in: gradientView.bounds, afterScreenUpdates: true)
}

目标C:

UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:gradientView.bounds.size];
UIImage *gradientImage = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
        [gradientView drawViewHierarchyInRect:gradientView.bounds afterScreenUpdates:true];
    }];

_progressView.progressImage = gradientImage;

上面的代码应该允许您将任何UIView转换为UIImage。理想情况下,您应该在viewWillAppear中运行它(此时视图控制器将具有正确的布局大小)。如果你有任何问题,你可以看看我为这个主题的指南做的这些示例项目! Objective CSwift

以上是关于将UIVIew转换为UIImage而不显示/显示UIView的主要内容,如果未能解决你的问题,请参考以下文章

在不先显示 UIView 的情况下将 UIView 转换为 UIImage?

UIView转换为UIImage

把 UIView 变成 UIImage

如何将(编辑的)UIView 转换为 UIImage?

我不知道如何将 UILabel 转换为 UIImage.[swift] [重复]

透明度问题 - 将 UIView 转换为 UIImage 时