1

UIImageビューといくつかのラベルを含むUIViewから画像をエクスポートしようとしています。私はこれを正しい方法で行っているかどうかわかりません。ビュー内のすべてをエクスポートして、レイアウトを維持したいと思います。1536x2048でエクスポートしたい。

次のコードをrenderInContextで使用して、メインビュー(UIView)の画像を取得しています。ある種の作品ですが、レイアウトがめちゃくちゃになり、基本的にレイアウトが変更され、ラベルが適切に拡大縮小されません。renderInContextはこのようなものに行く正しい方法ですか?もっと良い方法はありますか?

出力

ここからプロジェクト全体をダウンロードできます:http://tinyurl.com/7qvhqtp

UIGraphicsBeginImageContext(CGSizeMake(1536, 2048));
viewOutput.frame = CGRectMake(0, 0, 1536, 2048);
[[viewOutput layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(image,nil,nil,nil);
4

2 に答える 2

1

より大きな画像を取得するために行った唯一のことは、フレームを変更することでしたが、ラベルには正しい自動サイズ変更マスクがなく、フォントサイズも変更されませんでした。これは、「コードを実行した後」の画像で、ラベルが移動もサイズも変更されていないことがはっきりとわかります。

まず、スーパービューのフレームが変更されたときにラベルにフレームを変更させたい場合(ラベルは画像のサブビューですか?そうでない場合は、新しいフレームを自分で計算する必要があります)、適切なオーロサイズマスクを指定する必要があります。あなたの場合、画面の下部までの距離を固定し、上部までの距離を柔軟にする必要があります。また、幅を柔軟にできるように、左右の距離を固定することもできます。

これは、フォントサイズの問題を残すだけです。倍率(すべてが何倍大きくなるか)を計算し、現在のフォントサイズにその倍率を掛ける必要があります。

于 2012-07-19T14:36:18.663 に答える