我正在开发一个具有数百个背景图像的通用应用程序。为了节省磁盘空间,防止进一步的复制和磁盘垃圾邮件,我想将非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]
提示。