2016-08-04 74 views
0

我正在使用的方法來將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

回答

1

你的代碼很可能失敗,因爲你不佈置您的視圖的子視圖(當您添加視圖作爲一個子視圖這是自動完成的)。嘗試像我寫了下面的方法:

+ (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

0

假設您已經有了一個工作看來,這個代碼應工作到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