2016-10-13 5 views
0

私は30行のtableViewを持っていますが、tableviewヘッダの上にViewをも持っています。ビューとtableviewのすべての行が、私はtableviewとビューの表示行をキャプチャすることができます。私を助け、事前に感謝してください。 ここに私のコードとシミュレータのスクリーンショットがあります。 注意(我々は、ビューが固定されているThatsなぜテーブルビューをスクロールするとき、それはまた、スクロールするので、私は私の見解は、テーブルビューのヘッダーになりたくない)完全なテーブルビューのスクリーンショットをキャプチャする方法

- (void)viewDidLoad { 
    [super viewDidLoad]; 


    _myTableView.delegate = self; 
    _myTableView.dataSource = self; 

    UIBarButtonItem *next = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStylePlain target:self action:@selector(nextButtonAction)]; 
    UIBarButtonItem *screenShot = [[UIBarButtonItem alloc]initWithTitle:@"Screenshot" style:UIBarButtonItemStylePlain target:self action:@selector(screenshotButtonAction)]; 

    self.navigationItem.leftBarButtonItem = screenShot; 
    self.navigationItem.rightBarButtonItem = next; 


} 

-(void)nextButtonAction 
{ 

    NextViewController *myVc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"NextViewController"]; 
    NSLog(@"value of image is %@",viewImage); 
    myVc.myImage = viewImage; 
    [self.navigationController pushViewController:myVc animated:YES]; 

} 

-(void)screenshotButtonAction 
{ 

    UIView *viewToRender = self.myTableView; 
    CGPoint contentOffset = self.myTableView.contentOffset; 
    UIGraphicsBeginImageContext(viewToRender.bounds.size); 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
     CGContextTranslateCTM(ctx, 0,-contentOffset.y); //-contentOffset.y 
    [viewToRender.layer renderInContext:ctx]; 
    viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    } 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 30; 
} 
- (UITableViewCell)tableView:(UITableView)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *myString = @"reused"; 
    UITableViewCell *Cell = [tableView dequeueReusableCellWithIdentifier:myString]; 
    if (Cell == nil) 
    { 
     Cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:myString]; 
    } 
    Cell.textLabel.text = [NSString stringWithFormat:@"This is Cell %ld",indexPath.row]; 
    return Cell; 
} 

This is the view I want to take screenshot with full tableview and above image

+1

からテーブルビューはscrollviewの可能な複製であるので:http://stackoverflow.com/questions/3539717/getting-a-screenshot-of-a-uiscrollview-including-offscreen -部品 – Sealos

答えて

1

私はこのコードを変更しましたスイフト3 Getting a screenshot of a UIScrollView, including offscreen parts

func screenshot() -> UIImage{ 
var image = UIImage(); 
    UIGraphicsBeginImageContextWithOptions(self.tableView.contentSize, false, UIScreen.main.scale) 

    // save initial values 
    let savedContentOffset = self.tableView.contentOffset; 
    let savedFrame = self.tableView.frame; 
    let savedBackgroundColor = self.tableView.backgroundColor 

    // reset offset to top left point 
    self.tableView.contentOffset = CGPoint(x: 0, y: 0); 
    // set frame to content size 
    self.tableView.frame = CGRect(x: 0, y: 0, width: self.tableView.contentSize.width, height: self.tableView.contentSize.height); 
    // remove background 
    self.tableView.backgroundColor = UIColor.clear 

    // make temp view with scroll view content size 
    // a workaround for issue when image on ipad was drawn incorrectly 
    let tempView = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.contentSize.width, height: self.tableView.contentSize.height)); 

    // save superview 
    let tempSuperView = self.tableView.superview 
    // remove scrollView from old superview 
    self.tableView.removeFromSuperview() 
    // and add to tempView 
    tempView.addSubview(self.tableView) 

    // render view 
    // drawViewHierarchyInRect not working correctly 
    tempView.layer.render(in: UIGraphicsGetCurrentContext()!) 
    // and get image 
    image = UIGraphicsGetImageFromCurrentImageContext()!; 

    // and return everything back 
    tempView.subviews[0].removeFromSuperview() 
    tempSuperView?.addSubview(self.tableView) 

    // restore saved settings 
    self.tableView.contentOffset = savedContentOffset; 
    self.tableView.frame = savedFrame; 
    self.tableView.backgroundColor = savedBackgroundColor 

    UIGraphicsEndImageContext(); 

    return image 
} 
関連する問題