2013-09-03 3 views
11

tableViewのすべてのコンテンツをスクリーンショットする方法は? (全てのコンテンツは=見えるが+表示領域ではありません)IOS SDK - tableViewのショットコンテンツをスクリーニングする方法は?

私はこの試みた:私はそれだけで目に見えるエリアのスクリーンショットです意味、

UIGraphicsBeginImageContext(self.tableView.bounds.size); 
[self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage* image1 = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

self.imageView.image = image1; 

をしかし、それは動作しません:(


私はここでは):)

それを解決したコードです:)

+ (UIImage *)captureView:(UIScrollView *)view inContentRect:(CGRect)rect{ 
    UIImage* image = nil; 

    CGPoint savedContentOffset = view.contentOffset; 
    CGRect savedFrame = view.frame; 

    UIGraphicsBeginImageContextWithOptions(view.contentSize, 1, 0); 
    view.contentOffset = CGPointZero; 
    view.frame = CGRectMake(0, 0, view.contentSize.width, view.contentSize.height); 

    [view.layer renderInContext: UIGraphicsGetCurrentContext()]; 
    image = UIGraphicsGetImageFromCurrentImageContext(); 

    view.contentOffset = savedContentOffset; 
    view.frame = savedFrame; 

    UIGraphicsEndImageContext(); 

    // after all of this, crop image to needed size 
    return [Utils cropImage:image toRect:rect];         
} 
+0

「self.tableView.bounds.size」の代わりに '[(UIScrollView *)super contenSize]'を使用することができますか? – trojanfoe

+1

私はあなたがそれをすることができるとは思わない。 UITableViewはセルを再利用します。つまり、現在表示されているセルは現在UITableViewに追加されている唯一のセルです。 UITableViewをスクロールしているときには、下に向かって、UITableViewは一番上のセルが消えて、新しいコンテンツが一番下にあるように再構成してそこに追加します。したがって、UITableView全体のスクリーンショットを撮ることができれば、表示されていないセルは単に存在しないため、UITableViewの現在表示されている領域にのみコンテンツが表示されます。 – Trenskow

+0

@Trenskow実際、それはあなたが述べたように不可能ではありません。ほんの少しのロジックがあり、これを行うことができます:) –

答えて

4
+ (UIImage *)captureView:(UIScrollView *)view inContentRect:(CGRect)rect{ 
    UIImage* image = nil; 

    CGPoint savedContentOffset = view.contentOffset; 
    CGRect savedFrame = view.frame; 

    UIGraphicsBeginImageContextWithOptions(view.contentSize, 1, 0); 
    view.contentOffset = CGPointZero; 
    view.frame = CGRectMake(0, 0, view.contentSize.width, view.contentSize.height); 

    [view.layer renderInContext: UIGraphicsGetCurrentContext()]; 
    image = UIGraphicsGetImageFromCurrentImageContext(); 

    view.contentOffset = savedContentOffset; 
    view.frame = savedFrame; 

    UIGraphicsEndImageContext(); 

    // after all of this, crop image to needed size 
    return [Utils cropImage:image toRect:rect];         
} 
+0

UisegmentedCointrolの選択されたセグメントを正しく表示するためのヒントはありますか?今、選択されたセグメンテーションにはテキストがありません。 – P5ycH0

+0

メソッドでCGRect属性のために何を渡しているのですか?私の場合、私はtableviewフレームを渡しています。しかし、それはtableviewの全体の内容を表示していません.. –

2

あなたがテーブルビュー

の高さは、はい、あなたがこれを行うことができ、この

UIGraphicsBeginImageContext(self.tableView.contentSize.height); 
[self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage* image1 = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

self.imageView.image = image1; 
+0

これはまた、テーブルビューの可視領域のみの画面を作成します。 –

0

を試してみてください取得するためcontentSize.heightを使用する必要があります。私はあなたが望むもののための作業コードを提供することはできません、私はちょうどこれを行う方法をあなたに導くことができます。ループでは、テーブルのすべての部分のレンダーをcontentOffsetに変更して取得し、各イメージを配列に配置する必要があります。テーブルビューのすべての部分を取得したら、テーブルの各部分を1つのイメージに接続する必要があります(cgimagecontextの各イメージを描画し、結果イメージに正しいサイズを設定することを忘れないでください)。それはそれです、それはそれほど難しいことではありません:)これは、幸運を助けることを望む!

関連する問題