从UITableView创建UIImage

时间:2013-01-17 09:50:48

标签: iphone ios objective-c uitableview uiimage

有没有办法在UIImage中创建UITableView

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

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

    UIGraphicsBeginImageContext(view.bounds.size);

    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

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

    return viewImage;
}

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

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

3 个答案:

答案 0 :(得分: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];



}

这是拍摄图像的屏幕截图: -

enter image description here

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

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

答案 1 :(得分:0)

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

我认为这应该有用。

答案 2 :(得分: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;
}

enter image description here