Ios JPG图像不';t使用UIImage ImageName加载

Ios JPG图像不';t使用UIImage ImageName加载,ios,uiimage,imagenamed,Ios,Uiimage,Imagenamed,我从参考资料中了解到,使用UIImage对象的imageNamed方法,iOS版本4.+不需要文件扩展名 从UIImage类参考: 特别考虑 在iOS 4及更高版本上,不需要指定文件名 文件扩展名。在iOS 4之前,必须指定文件名 分机 但这似乎只适用于PNG文件 如果我的代码是: [UIImage imageNamed:@"test"]; 仅当文件为test.png 如果图像为test.jpg,则不会加载该图像 对我来说,这是一个大问题,因为我需要维护动态图像加载(我不知道在运行时我要加

我从参考资料中了解到,使用
UIImage
对象的
imageNamed
方法,iOS版本4.+不需要文件扩展名

UIImage
类参考:

特别考虑

在iOS 4及更高版本上,不需要指定文件名 文件扩展名。在iOS 4之前,必须指定文件名 分机

但这似乎只适用于PNG文件

如果我的代码是:

[UIImage imageNamed:@"test"];
  • 仅当文件为
    test.png
  • 如果图像为
    test.jpg
    ,则不会加载该图像
对我来说,这是一个大问题,因为我需要维护动态图像加载(我不知道在运行时我要加载的图像是
png
还是
jpg

你能帮我吗?

谢谢。

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

如果您是从在线来源获取它们,并且将它们作为NSData,则可以在此处使用此代码来确定类型

+ (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;
}

根据问题的答案

最新的开发者参考说明了缺失的信息:

特别注意事项 在iOS 4及更高版本上,如果文件为PNG格式,则无需指定.PNG文件扩展名。在iOS 4之前,必须指定文件扩展名

该库对PNG进行特殊处理的一个可能原因是,iOS硬件针对PNG进行了优化。存储在应用程序包中的PNG图像通过Xcode进行优化,更改PNG图像的字节顺序以匹配iPhone设备的图形芯片。(见问题:)

如果您知道您将只有一个PNG或JPG,另一个解决方案是在UIImage上创建一个类别,如下所示

- (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;
}

这些答案对你有帮助吗?