/**
* 截取tableView的所有内容生成图片
*
* @return 生成的image
*/
- (UIImage*)getCapture
{
UIImage* viewImage = nil;
UITableView *scrollView = self.tableView;
CGSize graphSize = CGSizeMake(scrollView.bounds.size.width, 210 * 20);
if (scrollView.contentSize.height < 210 * 20) {
graphSize = scrollView.contentSize;
}else
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"数据量较大,只截取20项分享哦" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show];
}
UIGraphicsBeginImageContextWithOptions(graphSize, scrollView.opaque, 0.0);
{
CGPoint savedContentOffset = scrollView.contentOffset;
CGRect savedFrame = scrollView.frame;
scrollView.contentOffset = CGPointZero;
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
[scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
viewImage = UIGraphicsGetImageFromCurrentImageContext();
scrollView.contentOffset = savedContentOffset;
scrollView.frame = savedFrame;
}
UIGraphicsEndImageContext();
return viewImage;
}
/**
* 截取指定tableView指定index的cell的内容生成image
*
* @param indexPaths 要截取的cell的index的数组
*
* @return 生成的image
*/
- (UIImage*)screenShotForIndexPaths:(NSArray*)indexPaths
{
CGPoint originalOffset = self.tableView.contentOffset;
//产生欲截取范围size的context, width为tableView的width, height为欲截取范围的cells的总height
UIGraphicsBeginImageContextWithOptions(CGSizeMake(CGRectGetWidth(self.tableView.frame), 210 * [indexPaths count]), NO, 0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
//一个一个把cell render到CGContext上
TableViewCell *cell = nil;
for(NSIndexPath *indexPath in indexPaths)
{
//让该cell被正确的产生在tableView上, 之后才能在CGContext上正确的render出來
[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];
cell = (TableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
[cell.layer renderInContext:context];
//欲在context上render的origin
CGContextTranslateCTM(context, 0, 210);
}
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.tableView.contentOffset = originalOffset;
return image;
}