2

uIImageViews やラベルなどのグラフィックを含むビュー (outPutView と呼ばれる) があります。outPutView とそのサブビューの画像をレンダリングする必要があります。そのために renderInContext:UIGraphicsGetCurrentContext() を使用しています。ビューをスケーリングする必要があることを除いて、正常に動作します。outPutView で変換を使用しています。これにより、ビューとそのサブビューが正常にスケーリングされますが、変換はレンダリングされません。ビューは画面上でスケーリングされます。最終的なレンダリングでは、Vie が元のサイズで表示されますが、レンダリング コンテキストはターゲット サイズ (ここでは @2x iPhone ビュー サイズ) です。

読んでくれてありがとう!!

[outPutView setTransform:CGAffineTransformMake(2, 0, 0, 2, 0, 0)];
CGSize renderSize = CGSizeMake(self.view.bounds.size.width*2, self.view.bounds.size.height*2);
UIGraphicsBeginImageContext(renderSize);
[[outPutView layer] renderInContext:UIGraphicsGetCurrentContext()];
renderedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
4

2 に答える 2

9

反対方向(スケールダウン)ではありますが、これを機能させました。関連するコードの概要は次のとおりです。

// destination size is half of self (self is a UIView)
float rescale = 0.5;
CGSize resize = CGSizeMake(self.width * rescale, self.height * rescale);

// make the destination context
UIGraphicsBeginImageContextWithOptions(resize, YES, 0);

// apply the scale to dest context
CGContextScaleCTM(UIGraphicsGetCurrentContext(), rescale, rescale);

// render self into dest context
[self.layer renderInContext:UIGraphicsGetCurrentContext()];

// grab the resulting UIImage
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

スケールダウンではなくスケールアップするには、rescale = 2.

于 2012-09-20T11:16:43.030 に答える
1

ビューを並べ替えることでこれを解決しました。実際には、出力ビューの間に別のビューを追加します。レンダリングされたコンテキストが取得されるビューと、変換によってスケーリングされるビューです。うまくいきましたが、現時点では理由がわかりません。これに関する任意の考えをいただければ幸いです。読んでくれてありがとう。

于 2012-09-21T04:30:22.233 に答える