1

我有一个UITableView,我想捕获它的可见部分,并将其放入一个UIImage. 有什么办法吗?

编辑

下面自答

4

4 回答 4

6

感谢您的回复。所有答案都适用于 UIView,但不适用于 UITableView - 至少在表格滚动时不会。滚动时,捕获的图像将显示为黑色或透明。我之前尝试过与以下类似的解决方案。我猜人们认为答案是显而易见的,这就是我被否决的原因——因为我很顽皮地提出了如此明显的问题。

无论如何,真正的解决方案是您必须使用表格的 contentOffset:

- (UIImage *) imageWithTableView:(UITableView *)tableView
{
    UIView *renderedView = tableView;
    CGPoint tableContentOffset = tableView.contentOffset;
    UIGraphicsBeginImageContextWithOptions(renderedView.bounds.size, renderedView.opaque, 0.0);
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(contextRef, 0, -tableContentOffset.y);
    [tableView.layer renderInContext:contextRef];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}
于 2012-10-18T16:30:08.723 回答
3
UIGraphicsBeginImageContext(someView.bounds.size);
[someView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

取自这个问题

于 2012-10-18T12:42:42.220 回答
1
- (UIImage *)captureView {

//hide controls if needed
CGRect rect = [yourTableView bounds];

    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [yourTableview.layer renderInContext:context];   
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;

}
于 2012-10-18T12:43:19.170 回答
1
UIGraphicsBeginImageContext(tableView.bounds.size);
[tableView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

也许这些帖子会有所 帮助

在 iOS 4 中将 UIView 内容保存为内部图像的实际大小(即放大内容以进行保存)

将 UIVIew 渲染到后台线程上的图像的安全方法?

于 2012-10-18T12:44:17.703 回答