截取TableView生成图片
分类:金沙APP

金沙APP,先看一下实例效果:

金沙APP 1

如果所示,这是一个在APP中截图,并调起微信客户端,发送给好友的例子,图片就是一个tableView的截图。

先实现一个小例子,如果tableVIew里面的内容,没有超过当前屏幕显示的区域,我们可以直接根据tableView的frame,生成一张图片

 //  根据view生成图片
    UIGraphicsBeginImageContext(shareView.bounds.size);
    [shareView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

 但是,如果遇到了内容过多的情况,此时tableView的行数会很多,如何截取tableView的contentSize里面的内容呢,其实也就是,获取每一个cell,一条一条的绘制出来就行了。此时,你需要先获取到cell的行数,设置tableView的rowHeight属性,这个就不用多说了。以下是主要代码:

//  截取tableView的图
- (UIImage*)screenShotForIndexPaths:(NSArray*)indexPaths{

    CGPoint originalOffset = self.tableView.contentOffset;

  //  
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.tableView.size.width, self.tableView.rowHeight * [indexPaths count]), NO, 0.0);

    CGContextRef ctx = UIGraphicsGetCurrentContext();

    //---一個一個把cell render到CGContext上
    UUMainVINCarMessageViewCell *cell = nil;
    for(NSIndexPath *indexPath in indexPaths)
    {
        //讓該cell被正確的產生在tableView上, 之後才能在CGContext上正確的render出來
        [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];

        cell = (UUMainVINCarMessageViewCell*)[self.tableView cellForRowAtIndexPath:indexPath];
        [cell.layer renderInContext:ctx];

        //--欲在context上render的origin
        CGContextTranslateCTM(ctx, 0, self.tableView.rowHeight);
        //--
    }
    //---

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    self.tableView.contentOffset = originalOffset;

    return image;
}

 就这么简单的实现了,此外记录一个博客

本文由金沙APP发布于金沙APP,转载请注明出处:截取TableView生成图片

上一篇:没有了 下一篇:从用户体验角度来一场小牛电动车的真正测评
猜你喜欢
热门排行
精彩图文