将UITableView的内容截取到UIImage上

/**

 *  截取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指定indexcell的内容生成image

 *

 *  @param indexPaths 要截取的cellindex的数组

 *

 *  @return 生成的image

 */

- (UIImage*)screenShotForIndexPaths:(NSArray*)indexPaths

{

    CGPoint originalOffset = self.tableView.contentOffset;

    

    //产生欲截取范围sizecontext, widthtableViewwidth, height为欲截取范围的cells的总height

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(CGRectGetWidth(self.tableView.frame), 210 * [indexPaths count]), NO, 0.0);

    

    CGContextRef context = UIGraphicsGetCurrentContext();

    

    //一个一个把cell renderCGContext

    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];

        //欲在contextrenderorigin

        CGContextTranslateCTM(context, 0, 210);

    }

    

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    self.tableView.contentOffset = originalOffset;

    return image;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值