我正在开发具有数百个背景图像的通用应用程序。为了节省磁盘空间并防止进一步的重复和磁盘垃圾邮件,我想将非视网膜 @1x iPad 图像重用为视网膜 @2x iPhone 图像。

例子:

background125_iPad@2x.png
background125_iPad.png

iPhone 4 和 5 具有不同的纵横比,因此我将缩放 1024x768 图像以适应。

但问题是,如果我在 iPhone 5 上使用它:
UIImage *img = [UIImage imageNamed:@"background125_iPad.png"];

然后iOS会尝试比我更聪明,并选择巨大的内存怪物@“background125_iPad@2x.png”版本。

有没有办法说:“iOS,你看。我比你聪明。我希望你加载这个文件。我真的是指这个文件。这个文件。把它当作一个带有比例尺的@2x 版本2 的因数。”这样它真的加载了请求的“background125_iPad.png”文件,但是 UIImageView 的行为好像它有 512 x 384 点(= 1024x768 px)?

我认为 UIImage imageNamed 不是要走的路吗?

最佳答案

我认为您无法关闭该功能。

但你总是可以这样做:

UIImage *img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"background125_iPad" ofType:@"png"]];
UIImage *scaledImage = [UIImage imageWithCGImage:[img CGImage]
                          scale:[[UIScreen mainScreen] scale]
                             orientation:img.imageOrientation];

这不会自动添加特定于设备的后缀。
我建议将其封装到 UIImage 类别中以方便使用:)

关于ios - 如何在 iPhone 上将 @1x iPad 图片加载为 @2x 图片?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20219090/

10-11 22:32
查看更多