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

2024-01-05

在我的 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 is /path/to/bundle/foo~iphone.png,在视网膜 iPhone 上,它加载@2x版本。

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

也就是说,它加载了我希望的图像,但是pathForResource处理设备修饰符,并且imageWithContentsOfFile处理比例修改器。

我想知道为什么。这文档 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/Reference/Reference.html of pathForResource没有提及设备修饰符,并且文档 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIImage_Class/Reference/Reference.html of imageWithContentsOfFile没有提及比例调节剂。

是否有单独的文档准确说明每个函数的作用?


的解释为imageWithContentsOfFile is in 相关文档 http://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/SupportingHiResScreensInViews/SupportingHiResScreensInViews.html#//apple_ref/doc/uid/TP40010156-CH15-SW1,不在UIImage文档本身:

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

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

我不知道哪个文档解释了pathForResource.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSBundle pathForResource:ofType: 和 UIImage imageWithContentsOfFile: 如何处理比例和设备修饰符? 的相关文章

随机推荐