如何NSBundle pathForResource:ofType:和UIImage imageWithContentsOfFile:处理比例和设备修饰符?

在我的iOS资源文件夹中,我有图像:

foo~iphone.png foo@2x~iphone.png foo~ipad.png foo@2x~ipad.png 

我加载它们:

 NSString *fileName = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"png"]; UIImage *image = [UIImage imageWithContentsOfFile:fileName]; 

实验:

在iPhone上, filename/path/to/bundle/foo~iphone.png ,在视网膜iPhone上,它加载@2x版本。

在iPad上, filename名为/path/to/bundle/foo~ipad.png ,在视网膜iPad上加载@2x版本。

也就是说,它加载我希望的图像,但是pathForResource处理设备修改器, imageWithContentsOfFile处理缩放修改器。

我想知道为什么。 pathForResource的文档中没有提到设备修饰符,而imageWithContentsOfFile的文档中没有提到关于scale修饰符的内容。

是否有单独的文件,准确地表明每个function?

imageWithContentsOfFile的解释在相关文档中 ,而不是在UIImage文档中:

在具有高分辨率屏幕的设备上,imageNamed :, imageWithContentsOfFile:和initWithContentsOfFile:方法会自动在名称中使用@ 2x修饰符查找所请求图像的版本。 如果find一个,它会加载该图像。 如果您没有提供给定图像的高分辨率版本,则图像对象仍会加载标准分辨率图像(如果存在),并在绘图期间对其进行缩放。

当它加载图像时,UIImage对象自动将大小和缩放属性设置为基于图像文件后缀的适当值。 对于标准分辨率图像,它将scale属性设置为1.0,并将图像的大小设置为图像的像素尺寸。 对于在文件名中带有@ 2x后缀的图像,它将scale属性设置为2.0,并将宽度和高度值减半以补偿缩放因子。 这些减半的值正确地与您在逻辑坐标空间中用来渲染图像的基于点的尺寸正确关联。

我不知道哪个文档解释了pathForResource的行为。