将UIVIew保存为图像的最快且资源效率最高的方法是什么?

时间:2011-07-15 20:22:39

标签: ios uiview uiimage

我们有一个相当复杂的视图层次结构,在屏幕上重复多次。为了在分配这些视图时节省资源,我们将它们渲染一次,保存到UIImage,然后将它们保存到磁盘。下次需要时,可以快速从磁盘中取出它们,而不是再次重新创建它们。我现在用于渲染视图的方法是这样的(tile是传入的UIView对象):

static CGFloat scale = -1.0;
    if(scale < 0.0){
        UIScreen *screen = [UIScreen mainScreen];
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {
            scale = [screen scale];
        }else{
            scale = 0.0;
        }
    }

    CGSize size = CGSizeMake(100.0, 100.0);

    if(scale>0.0) // handling retina display
        UIGraphicsBeginImageContextWithOptions(size, NO, scale);
    else
        UIGraphicsBeginImageContext(size);

    [tile.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();           
    UIGraphicsEndImageContext();

    NSData *imageData = UIImagePNGRepresentation(viewImage);

    success = [fileManager createFileAtPath:savePath 
                                   contents:imageData 
                                 attributes:nil];

这种方法效果很好,但它是我应用中的顶级资源。根据Instruments的说法,它在应用程序运行期间消耗了大部分时间和内存。指出的主要方法调用是UIImagePNGRepresentation。有没有更有效的方法来完成这项任务?

0 个答案:

没有答案