2016-04-25 10 views
0

完全に動作するこのコードが見つかりました。しかし、スクロールビューのサイズを使用します。私は自分のサイズを使いたい。iOS - UIScrollViewの可視領域のスクリーンショットをサイズで取得しますか?

UIScrollView *contentScrollView;....//scrollview instance 

UIGraphicsBeginImageContextWithOptions(contentScrollView.bounds.size, 
             YES, 
             [UIScreen mainScreen].scale); 

//this is the key 
CGPoint offset=contentScrollView.contentOffset; 
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -offset.x, -offset.y); 

[contentScrollView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *visibleScrollViewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

私はCGSizeを使用したい場合は、私がCGContextTranslateCTMのために何を使うべきでしょうか?

EDIT

マイscrollViewサイズは、私は、そのサブビューとしてimageViewを加え350 X 350です。 ユーザーはscrollViewをズームしてスクロールできます。

ユーザーがズーム/スクロールした後、ユーザーは[保存]ボタンをクリックできます。このボタンは、私のスクリーンショットを取るscrollView

上記のコードから。私のスクリーンショットの画像サイズは350 x 350(scrollViewと同じサイズ)です。私は、サイズが1040 x 1040のscrollViewのスクリーンショットを撮り、正しいズーム/スクロールエリアを取得したいと思います。

私はこれを行うことによって、サイズを変更することができます知っている:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(1040, 1040), YES, [UIScreen mainScreen].scale); 

しかし、私は新しいサイズに応じたオフセット部分を変更する方法がわかりません。

+0

。 –

+0

はい私はこれを知っています。スクロールビューがズームされるのが問題です。結果画像のオフセットを設定する方法はわかりません。あなたが答えを知っているなら、私を助けてください。ありがとう。 – imstillalive

+0

@imstillalive結果として得られる画像のサイズを変更しようとしていないので、レンダリングするスクロールビューの部分を定義するカスタムオフセットを提供したいだけですか? – Hamish

答えて

0

drawViewHierarchyInRect:を使用している場合は、コンテンツのオフセットと縮尺を先頭についていくことを避けることができます。指定された矩形内のスクロールビューの可視領域をレンダリングします。

これにより、カスタムサイズを渡すことができ、それに応じて拡大縮小されます。例えば

:あなたはまだ層自身をレンダリングする場合は、あなただけのrenderInContextとして(スクロールビューのサイズに新しいサイズの比率に応じてコンテキストを拡張する必要があり

CGSize size = (CGSize){1040, 1040}; 

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 
[scrollView drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:NO]; 
UIImage* img = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

コンテキストのサイズではなくレイヤーのサイズを使用します)、コンテンツオフセットでオフセットします。例えば

:あなたはUIGraphicsBeginImageContext(imgV.frame.size)にCGSizeを渡すことができ

CGSize size = (CGSize){1040, 1040}; 

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 
CGContextRef ctx = UIGraphicsGetCurrentContext(); 

CGContextScaleCTM(ctx, size.width/scrollView.bounds.size.width, size.height/scrollView.bounds.size.height); 
CGContextTranslateCTM(ctx, -scrollView.contentOffset.x, -scrollView.contentOffset.y); 
[scrollView.layer renderInContext:ctx]; 

UIImage* img = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
関連する問題