UITableView截取整张表格。

UITableView继承自UIScrollView,但和UIScrollView不同的是,在UITableView中是用的lazy loading的机制,既滚动到相应的offset才将需要显示在可见区域的tableviewcell显示出来,这样可以避免所有tableviewcell全部加载到scrollview上面造成内存占用过高,并且可以实现UITableViewCell的重用机制来增滑动时的流畅度,但是这样的话,就没有办法直接截取整张表全部cell的截图了。

如果是UIScrollView,可以直接通过下面的方法截取全图:

- (UIImage *)cutView:(UIView *)theView
{
    CGRect rect = theView.frame;  //截取图片大小
    UIGraphicsBeginImageContext(rect.size);
    [theView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}
在UITableView中,可以通过以下方法来截取全部cell:

- (UIImage *)getFullImage:(UITableView *)tableView
{
    //t来保存整张图的高度
    int t = 0;
    for (int i = 0; i < [self tableView:nil numberOfRowsInSection:0]; ++i) {
        NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:0];
        t += [self tableView:nil heightForRowAtIndexPath:path];
    }
    //开始绘图
    UIGraphicsBeginImageContext(CGSizeMake(320, t));
    //获取当前图形上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    //保存上一个cell绘制时候的纵向偏移
    float lasty = .0;
    //保存当前总共绘制的高度
    float height = .0;
    //使用循环创建tableviewcell绘制在图形上下文之上
    for (int i = 0; i < [self tableView:nil numberOfRowsInSection:0]; ++i) {
        //绘制第i个cell的时候需要下移前面所有cell高度的和
        CGContextTranslateCTM(context,.0,-lasty);
        
        NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:0];
        //获取cell
        UITableViewCell *Cell = [tableView cellForRowAtIndexPath:path];
        if (Cell == nil) {
            Cell = [self tableView:nil cellForRowAtIndexPath:path];
        }
        
        height += [self tableView:nil heightForRowAtIndexPath:path];
        
        float y = height - [self tableView:nil heightForRowAtIndexPath:path];
        //绘图偏移移回最顶部
        CGContextTranslateCTM(context,.0,y);
        //绘制
        [Cell.layer renderInContext:context];
        
        lasty = y;
    }
    //结束绘图
    CGImageRef imageMasked = CGBitmapContextCreateImage(context);
    UIImage *fullimage = [UIImage imageWithCGImage:imageMasked];
    UIGraphicsEndImageContext();
    return fullimage;
}
这里获取的image的截图是uitableviewcell的所有的集合,不包括uitableview的背景,如果需要,还需在最下层绘制一个背景出来。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值