【问题标题】:creating a UIImage from a UITableView从 UITableView 创建 UIImage
【发布时间】:2012-12-31 19:47:58
【问题描述】:

有没有办法从UITableView 创建一个UIImage

我知道这段代码会从给定的UIView 中画出UIImage

-(UIImage*) makeImageOutOfView:(UIView*)view {

    UIGraphicsBeginImageContext(view.bounds.size);

    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return viewImage;
}

但它只会创建具有表格框架大小的图像。我想创建一个显示整个表格内容的图像。另一个问题是,不仅创建的图像仅限于表格的框架,而且在滚动表格后创建图像时会产生非常奇怪的结果(只有前 6 个中的可见单元格显示在图像中,仅此而已,其他可见单元格未绘制..)

编辑 - 我想创建一个从 tableView 的内容中提取的图像,而不是设置 tableView 的背景来显示图像..

【问题讨论】:

  • self.tblView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"NameOfimage"]];
  • 我认为您误解了我,或者我没有很好地解释我的自我,将编辑问题以使其清楚
  • 嘿@DavidBenAri 必须尝试我的答案......让我知道它对你有没有帮助......?
  • @NitinGohel,我接受了你的回答并在那里发表了评论......谢谢
  • @NitinGohel,这种方法对我不起作用。我已将 tableView 的帧大小更改为完整内容大小。但是在创建 UIImage 时,只有图像大小会增加,但不会加载剩余的表格视图单元格。已加载到视图中的单元格仅显示并在图像的剩余区域显示空白。你能帮忙解决吗?

标签: iphone ios objective-c uitableview uiimage


【解决方案1】:
- (UIImage *)imageWithTableView:(UITableView *)tableView{
UIImage* image = nil;

UIGraphicsBeginImageContextWithOptions(tableView.contentSize, NO, 0.0);

CGPoint savedContentOffset = tableView.contentOffset;
CGRect savedFrame = tableView.frame;

tableView.contentOffset = CGPointZero;
tableView.frame = CGRectMake(0, 0, tableView.contentSize.width, tableView.contentSize.height);

[tableView.layer renderInContext: UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();

tableView.contentOffset = savedContentOffset;
tableView.frame = savedFrame;

UIGraphicsEndImageContext();

return image;
}

【讨论】:

    【解决方案2】:

    我只是为您创建了一个 DEMO,希望它可以帮助您像这样捕获表格图像:-

    -(IBAction)savebutn:(id)sender
    {
        [tbl reloadData];
    
        CGRect frame = tbl.frame;
        frame.size.height = tbl.contentSize.height;
        tbl.frame = frame;
    
        UIGraphicsBeginImageContext(tbl.bounds.size);
        [tbl.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *saveImage = UIGraphicsGetImageFromCurrentImageContext();
    
        UIGraphicsEndImageContext();
        NSData *imageData = UIImagePNGRepresentation(saveImage);
        NSFileManager *fileMan = [NSFileManager defaultManager];
    
        NSString *fileName = [NSString stringWithFormat:@"%d.png",1];
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
        [fileMan createFileAtPath:pdfFileName contents:imageData attributes:nil];
    
    
    
    }
    

    这是捕获图像的屏幕截图:-

    捕获图像包含从上到下的完整表格单元格,请下载它的演示:-

    http://www.sendspace.com/file/w48sod

    【讨论】:

    • 将 tableView 框架的高度调整为 contentSize 的高度,成功了。(将 tableView 框架的高度更改为内容高度,将一次填充所有单元格,允许使用表的全部内容)
    • @NitinGohel,这种方法对我不起作用。我已将 tableView 的帧大小更改为完整内容大小。但是在创建 UIImage 时,只有图像大小会增加,但不会加载剩余的表格视图单元格。已加载到视图中的单元格仅显示并在图像的剩余区域显示空白区域。你能帮忙解决吗?
    【解决方案3】:

    您可以做的一件事是,创建一个UIView,在图像中将所有单元格添加到另一个下方,最后使用您拥有的代码将该UIView 转换为图像。

    我认为应该可以。

    【讨论】:

    • 我也想过,这将是我最后的手段,但我想先问一下,也许有更优雅的方式..
    • 我怀疑还有其他方法,因为表格单元格是动态生成并重用的,不可能通过任何其他方式一次获得所有单元格内容。
    • 可以下载我创建的演示并按数组添加更多单元格,然后单击保存按钮,您将获得所有完整的表格作为图像:)
    • 为什么投反对票?这样做的人请说明原因。
    • 无论如何,我没有看到反对票,@NitinGohel 的回答很好。将 tableView 框架的高度更改为内容高度,将一次填充所有单元格,允许使用表格的全部内容创建图像..
    猜你喜欢
    • 2016-10-10
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多