隐藏UIVIew UIImage而不呈现/显示UIView

问题描述:

我正在使用的方法来将UIView转换为UIImage和它做一个伟大的工作,当UIView(要转换为UIImage)已经存在/显示。但我的要求是将UIView转换为UIImage而不显示UIView。不幸的是,这个代码在这种情况下失败了,我被卡住了。任何帮助将不胜感激。隐藏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; 
} 
+0

只需隐藏UIView并获得图像转换。 –

+0

隐藏的视图不适合我,我也试过。 – Abid

你的代码很可能失败,因为你不布置您的视图的子视图(当您添加视图作为一个子视图这是自动完成的)。尝试像我写了下面的方法:

+ (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; 
} 
+0

这一个也不适合我。 – Abid

+0

表示它“不工作”没有帮助。发生什么事? –

+0

查看未使用上述代码转换为图像。这仅适用于在屏幕上显示视图的情况。 – Abid

假设您已经有了一个工作看来,这个代码应工作到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