0

UIScrollView のすべてのコンテンツを .pdf に保存しようとしています。現在のビューを保存するためのチュートリアルをいくつか見つけましたが、それらはすべて を使用して CGContextRef を作成することに依存していUIGraphicsGetCurrentContext()ます。今、私は自分の見解をただ

CGContextRef context = UIGraphicsGetCurrentContext();
[myView.layer renderInContext:context];

そして、それはプレーンな UIView でうまく機能します。ただし、UIScrollView を として渡そうとすると、UIScrollViewmyViewの表示部分は正常に渡されますが、画面外のものはすべて空白です。 現在表示されているものだけでなく、UIScrollView のすべてのコンテンツを取得するために何らかの方法で拡張できる方法はありますか? context UIScrollView には使用できないと思われUIGraphicsGetCurrentContext()ますが、代わりに何を使用すればよいかわかりません。これに関するApple ドキュメントはあまり役に立ちません。

4

4 に答える 4

4

スクロールするコンテンツで scrollView のコンテンツ全体のサイズを取得するサブビューがある場合は、次のように実行できます。

CGContextRef context = UIGraphicsGetCurrentContext();
UIView *contentView = [scrollView subviews][0];
[contentView.layer renderInContext:context];

scrollView に複数のビューがある場合は、次のようにできます。

UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(
                                                          scrollView.frame.origin.x,
                                                          scrollView.frame.origin.y, 
                                                          scrollView.contentSize.width, 
                                                          scrollView.contentSize.height)];
for(UIView *view in [scrollView subviews]){
 [contentView addSubview: view];
}

CGContextRef context = UIGraphicsGetCurrentContext();
[contentView.layer renderInContext:context];

次に、ビューを scrollView に戻す必要があります。おそらくそれらをコピーする方法がありますが、方法がわかりません。とにかく、ここで何が機能するはずです:

for(UIView *view in [contentView subviews]){
 [view removeFromSuperView];
 [scrollView addSubview:view];
}
于 2013-03-21T17:41:54.280 に答える
0

renderInContext を呼び出す前に、UIScrollView のフレームをそのコンテンツ サイズと等しく設定し、コンテンツ オフセットを 0 に設定できます。その後、フレームを元に戻します。

myView.frame = CGRectMake(myView.frame.origin.x,myView.frame.origin.y,myView.contentSize.with,myView.contentSize.height);
于 2013-03-21T17:30:04.757 に答える