2016-08-04 16 views
0

UIViewをUIImageに変換するメソッドを使用しています。UIView(UIImageに変換する)が既に存在/表示されています。しかし、私の要件はUIViewをUIViewを表示せずにUIImageに変換することです。残念ながら、このコードはこの場合失敗しており、私は立ち往生しています。どんな助けもありがとう。Covert UIVIew to UIImage to UIView(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

をすでに作業ビューを持っている、このコードはUIImageUIViewを変換するために動作するはずと仮定すると:私は以下の書いた方法のようなものを試してみてください。

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

オブジェクティブC:

スイフト上に画像を表示します

上記のコードでは、UIViewUIImageに変換することができます。理想的にはviewWillAppearで実行する必要があります(この時点では、View Controllerは正しいレイアウトサイズになります)。これをうまく動作させるのに問題がある場合は、この非常にトピックに関するガイドのために作成したサンプルプロジェクトを見てください! Objective C,Swift