iPhone将UIListView渲染(或捕获)到图像中

时间:2009-09-02 20:16:38

标签: iphone

我想将基本的UIListView渲染到我可以保存的图像中。 我发现这里有很多代码用于渲染图像的UIView(用于iphone / iPod Touch)。事实上,下面的代码是我从其他帖子中提取的,现在正在使用。问题是它没有从UIListView中绘制任何东西,这在调用方法时是不可见的。

- (void)snapShotAction:(id)sender
{
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    UIGraphicsBeginImageContext(screenRect.size);

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [[UIColor blackColor] set];
    CGContextFillRect(ctx, screenRect);

    //[self.view.layer renderInContext:ctx];
    [self.myTableView.layer renderInContext:ctx];

    UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    
    UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil);

}

所以我希望能够强制整个UIListView渲染(包括屏幕外的行)到图像的灵活性,但如果没有人有一些洞察力来实现这一点,我想我的另一种选择是创建一个图像或者graphicscontext,只需手动渲染列表的传真(以及对样本代码的任何引用都可以理解)。

这是我想到的另一个想法。也许我可以使用单独的UITableView,没有底部或顶部条(以最大化水平空间),然后根据表中的项数计算行高,然后使用上面的代码捕获它。当然,在文本大小太小而无法使用之前,列表可以拥有的项目数量会有限制......

1 个答案:

答案 0 :(得分:1)

问题在于UIListView的工作方式。为了节省内存,它不会在它显示之前呈现单元格,因此任何关闭屏幕的UIListViewCell都可能无法呈现。如果没有挖掘并将代码注入UIListView以使其呈现方式不同(可能不是一个好主意),那么您将不得不通过向下滚动列表将它拼接在一起。

这是一个你可以尝试的想法,可能不会起作用:尝试更改窗口的边界,所有相关视图都大于屏幕,大到足以同时容纳整个UIListView。假设你在模拟器上运行,这不应该杀死内存。但是,我有一种感觉,UIListView比被愚弄更聪明,并且根据屏幕的大小部分呈现多少。但它可能值得一试。