我正在开发一款包含数百张背景图片的通用应用。为了节省磁盘空间并防止进一步复制和磁盘垃圾邮件,我想重新使用非视网膜@ 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
不是那种方式吗?
答案 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]
提示。