如何在iPhone上将1x iPad图像加载为@2x图像



我正在开发一个具有数百个背景图像的通用应用程序。为了节省磁盘空间,防止进一步的复制和磁盘垃圾邮件,我想将非retina@1x iPad图像重新用作retina@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,看。我比你聪明。我希望你加载这个文件。我真的是指这个文件。这个。把它当作一个缩放因子为2的@2x版本。"这样它就真的加载了请求的"background125_iPad.png"文件,但UIImageView就好像它有512 x 384点(=1024x768像素)一样?

我想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类别中:)

要准确地按照指定加载图像并获得正确的比例因子,这应该有效:

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

感谢Grzegorz的-imageWithContentsOfFile:[[UIScreen mainScreen] scale]提示。

最新更新