そのタイトルが意味をなすことを願っています。
私はもの(画像)を追加するUIView(IBで作成)を持っています。次に、いくつかのテキストを含む UILabel があります。今、私はそれから UIImage を作りたいと思っています。
UIView *comp = [[UIView alloc] initWithFrame:self.previewView.frame];
[comp addSubview:self.previewView];
[comp addSubview:self.lblCaption];
UIGraphicsBeginImageContextWithOptions(comp.bounds.size, NO, 1.0);
[comp.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.previewView と self.lblCaption は両方とも IB で作成されます。previewView は単なる画面いっぱいのビューです。
コード ブロックは、ボタンのタップ後に IBAction で実行されます。
これはうまく機能します。期待どおりの画像が得られ、さらに処理できます。
でもその後、≪self.previewView≫の中身がなくなった?NSLog を実行すると、すべてがそこにあるように見えますが、画面には表示されなくなりました。
ここで何が起こっているのか知っている人はいますか?
[編集]
以下の回答にあるように、ビューは以前に self.view に追加されていたため、コンプに追加したときに削除されました。解決策は非常に簡単です。実際には、コードを次のように変更しました: (UIImage を返す関数を作成しました。これは、コードで実行するよりも少しクリーンです....
-(UIImage *)imageFromView:(UIView *)theView andLabel:(UILabel *)theLabel{
UIGraphicsBeginImageContextWithOptions(comp.bounds.size, NO, 1.0);
[theView.layer renderInContext:UIGraphicsGetCurrentContext()];
[theLabel.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}