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

时间:2013-11-26 13:58:34

标签: ios iphone ipad uikit

我正在开发一款包含数百张背景图片的通用应用。为了节省磁盘空间并防止进一步复制和磁盘垃圾邮件,我想重新使用非视网膜@ 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,看。我比你聪明。我希望你加载这个文件。我真的是指这个文件。这个。并把它看作是@ 2x版本比例因子为2.“这样它确实加载了所请求的“background125_iPad.png”文件,但是UIImageView就好像它有512 x 384点(= 1024x768像素)?

我认为UIImage imageNamed不是那种方式吗?

2 个答案:

答案 0 :(得分:2)

我认为你不能关闭这个功能。

但你可以随时这样做:

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类别中以便更简单地使用:)

答案 1 :(得分:1)

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

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]提示。