JPG图像不会加载UIImage imageNamed

我从iOS版本4 +与UIImage对象的方法imageNamed的参考阅读,文件扩展名不是必需的。

UIImage类参考:

特别注意事项。

在iOS 4及更高版本中,文件的名称不需要指定文件扩展名。 在iOS 4之前,您必须指定文件扩展名。

但是,这似乎只适用于PNG文件。

如果我的代码是:

 [UIImage imageNamed:@"test"]; 
  • 只有在文件是test.png才会加载图像
  • 如果是test.jpg ,图片不会加载。

对我来说,这是一个大问题,因为我需要保持一个dynamic图像加载(我不知道在运行时如果我想加载的图像是pngjpg png )。

请你帮帮我吗?
谢谢。

最新的开发人员参考指出缺less的信息:

特殊注意事项在iOS 4和更高版本中,如果文件是PNG格式,则不需要指定.PNG文件扩展名。 在iOS 4之前,您必须指定文件扩展名。

图书馆给予PNG特殊待遇的一个可能原因是iOS硬件针对PNG进行了优化。 存储在应用程序包中的PNG图像通过Xcode优化,改变PNG图像的字节顺序以匹配iPhone设备的graphics芯片。 (看到这个问题: 对于iOS上的所有图像文件,PNG是否优先于JPEG? )。

如果你知道你只有一个PNG或一个JPG,另一种解决scheme是在UIImage上创build一个类别,如下所示。

 - (UIImage*) jgcLoadPNGorJPGImageWithName:(NSString*)name { UIImage * value; if (nil != name) { value = [UIImage imageNamed:name]; if (nil == value) { NSString * jpgName = [NSString stringWithFormat:@"%@.jpg", name]; value = [UIImage imageNamed:jpgName]; } } return value; } 

如果您的应用程序中捆绑了这些图像,您应该知道它们的扩展名。

如果你从一个在线来源获得他们,你有他们作为NSData,你可以在这里使用这个代码来确定types。

 + (NSString *)contentTypeForImageData:(NSData *)data { uint8_t c; [data getBytes:&c length:1]; switch (c) { case 0xFF: return @"image/jpeg"; case 0x89: return @"image/png"; case 0x47: return @"image/gif"; case 0x49: case 0x4D: return @"image/tiff"; } return nil; } 

按照这个问题的答案。