3

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

我知道这段代码会UIImage从给定的内容中提取UIView

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

    UIGraphicsBeginImageContext(view.bounds.size);

    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

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

    return viewImage;
}

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

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

4

3 回答 3

4

我只是为您创建一个 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

于 2013-01-17T10:15:04.503 回答
0

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

我认为这应该有效。

于 2013-01-17T10:05:51.213 回答
0
- (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;
}

在此处输入图像描述

于 2016-08-25T11:14:09.207 回答