当@ 2x版本也存在时,在iOS中选择性地加载低分辨率资源

时间:2011-08-29 05:45:51

标签: ios uiimage

当高分辨率版本(@ 2x)也出现时,我在iOS上强制加载某些资源的低分辨率版本时遇到了很多麻烦。

我想这样做的原因很简单:我的应用向用户显示一堆全屏图像(旧设备上为320x480,Retina设备上为640x960),用户可以将其中一些上传到TwitPic。我想将上传的图像统一为320x480,无论设备如何(为了保持一致性,因为在Web浏览器中这个尺寸很好)。

我发现无论我使用什么UIImage方法,当资源文件的高分辨率版本存在时,它都会加载(即使你传递完整的文件路径):UIImage会让你变得聪明。但我找到了一种超越智能UIImage的方法:

- (UIImage*) lowResImage{

    NSString* path = [[NSBundle mainBundle] pathForResource:_fileName 
                                                     ofType:@"png"
                                                inDirectory:_resourceSubdirectory];

    path = [path stringByReplacingOccurrencesOfString:@"@@2x" withString:@""];

    NSData* imageData = [[NSData alloc] initWithContentsOfFile:path];

    UIImage* image = [[UIImage alloc] initWithData:imageData];
    [imageData release];

    return [image autorelease];
}

以上代码适用于第4代iPod touch。

有人提出了更好的方法吗?

1 个答案:

答案 0 :(得分:2)

构建路径,打开数据,然后使用数据初始化图像,如下例所示。


   NSString *dataPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:_fileName];
   NSData *data = [[NSData alloc] initWithContentsOfFile:dataPath];
   UIImage *image3 = [UIImage imageWithData:data];