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

4

我正在开发一个通用的应用程序,其中包含数百个背景图像。为了节省磁盘空间,防止进一步重复和磁盘垃圾邮件,我想要将非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 px)?

我假设UIImage imageNamed不是正确的方式?

2个回答

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

是的,看起来加载了正确的图像,但比例因子是错误的。iOS 应该将其视为 @2x 图像。你会怎么做? - openfrog
你尝试过将其缩放到[UIScreen mainScreen].scale吗? - Grzegorz Krukowski
如果我没记错的话,比例尺是只读的。但也许我找到了缩放的解决方案。请看我的回答(已经给你信用):-) - openfrog

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


但是这会引发其他设备的问题 :) 最好使用 [UIScreen mainScreen].scale - Grzegorz Krukowski
我更新了我的答案 - 在我看来,你也可以从图像中获取方向,这更好。 - Grzegorz Krukowski
完美。已接受 :-) - openfrog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接