2016-05-05 3 views
1

テーブルをスクロールダウンすると、イメージとしてUITableViewをキャプチャするためのSwiftコードが動作しません。私は本質的にObjective-Cの答えを持っていますが、それをSwiftで動かすことはできません。現在、これは私がスウィフトに持っているものです。UITableViewをイメージとしてキャプチャする - スクロールする

func snapshotOfCell (inputView: UIView) -> UIView { 
    UIGraphicsBeginImageContextWithOptions(inputView.bounds.size, false, 0.0) 
    inputView.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
    let image = UIGraphicsGetImageFromCurrentImageContext() as UIImage 
    UIGraphicsEndImageContext() 
    let cellSnapshot : UIView = UIImageView(image: image) 
    cellSnapshot.layer.masksToBounds = false 

    return cellSnapshot 
} 

私はthis答えを見つけたが、それはObjective-Cである:contentOffsetを使って、スクロールの問題を解決するよう

-(UIImage *) imageWithTableView:(UITableView *)tableView { 
    UIView *renderedView = tableView; 
    CGPoint tableContentOffset = tableView.contentOffset; 
    UIGraphicsBeginImageContextWithOptions(renderedView.bounds.size, renderedView.opaque, 0.0); 
    CGContextRef contextRef = UIGraphicsGetCurrentContext(); 
    CGContextTranslateCTM(contextRef, 0, -tableContentOffset.y); 
    [tableView.layer renderInContext:contextRef]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 

。しかし、私は成功せずにそれを私のSwift機能に統合しようとしてきました。 Objective-CとSwiftの両方で良い人は誰ですか?ありがとう!

答えて

2

あなたにこの1人のそのがかもしれ助けをしてみてください@ Jeyamahesanの答えに基づいてテーブルビュー全体をキャプチャするためのSwift 3.0バージョン

UIGraphicsBeginImageContextWithOptions(CGSize(width:tableView.contentSize.width, height:tableView.contentSize.height),false, 0.0) 
let context = UIGraphicsGetCurrentContext() 
let previousFrame = tableView.frame 
tableView.frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.contentSize.width, height: tableView.contentSize.height) 
tableView.layer.render(in: context!) 
tableView.frame = previousFrame 
let image = UIGraphicsGetImageFromCurrentImageContext()! 
UIGraphicsEndImageContext() 
+0

これは運がないとしようとしました。私のスウィフトコードのように動作します。テーブルがスクロールされていないときは正常に動作しますが、スクロールテーブルは正しく取り込まれません。 –

+0

タブビューのスクリーンショットをある位置でスクロールした後に表示しますか? – Jeyamahesan

+0

はい、申し訳ありませんが、私はそれを明確にしませんでした。途中で下にスクロールしてコードを実行すると、画像は現在多くの空白をキャプチャするように見えますが、正しくありません。私は画面に何が映っているかを写真に反映させたい。 –

0

は、コードのこの部分を試してみてください:

-(UIImage *)screenshot { 
UIImage *image = nil; 

UIGraphicsBeginImageContextWithOptions(tableView.contentSize, false, 0.0); 
{ 
    CGPoint savedContentOffset = tableView.contentOffset; 
    CGRect savedFrame = tableView.frame; 

    tableView.contentOffset = CGPointMake(0.0, 0.0); 
    tableView.frame = CGRectMake(0, 0.0, tableView.contentSize.width, tableView.contentSize.height); 

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

    tableView.contentOffset = savedContentOffset; 
    tableView.frame = savedFrame; 
} 
UIGraphicsEndImageContext(); 

return image; 
} 

ハッピーコーディング..!

+0

ありがとうございました。今すぐドアを外してください。今夜は試してみてください。 Objective-Cの最初の2行はありませんか? –

+0

ちょうど試してみてください..それは正常にスクロールビューのためにテストされ、私はそれもあなたのために動作することを願っています。コード全体はObjective-Cで書かれています。 –

0

スクロール位置

let contentOffset = tableView.contentOffset 

    UIGraphicsBeginImageContextWithOptions(tableView.bounds.size, true, 1) 

    let context = UIGraphicsGetCurrentContext() 

    CGContextTranslateCTM(context, 0, -contentOffset.y) 

    tableView.layer.renderInContext(context!) 

    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    imageView.image = image; 
1

でテーブルビューのスクリーンショットをキャプチャ画像

UIGraphicsBeginImageContextWithOptions(CGSizeMake(tableView.contentSize.width, tableView.contentSize.height),false, 0.0) 

    let context = UIGraphicsGetCurrentContext() 

    let previousFrame = tableView.frame 

    tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.contentSize.width, tableView.contentSize.height); 

    tableView.layer.renderInContext(context!) 

    tableView.frame = previousFrame 

    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext(); 

    imageView.image = image; 

として全体のテーブルビューをキャプチャ

- (UIImage*)buildImage:(UIImage*)image 
{ 
    UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); 

    [image drawAtPoint:CGPointZero]; 


    CGFloat scale; 

    scale = image.size.width/_workingView.frame.size.width; 



     CGContextScaleCTM(UIGraphicsGetCurrentContext(), scale, scale); 

    NSLog(@"%f",scale); 


    [tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

    UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return tmp; 
} 
関連する問題