0

そのタイトルが意味をなすことを願っています。

私はもの(画像)を追加する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;
}
4

1 に答える 1

1

私はちょうど可能な状況を想定して推測しています...

self.previewView他のビューで表示していたと仮定すると、 self.view.

に追加self.previewViewしたときにcomp、 から削除された可能性がありますself.view。(UIView.superview が 1 つのインスタンスのみであることを考えると、これは非常に可能性が高いと思います)。

このような場合は、画像を取得した後に再度追加self.previewViewするself.viewと問題が解決します。

于 2012-10-08T00:05:08.403 に答える