应用程序无法识别@2x图像

4
这让我感到很烦恼。已经搜索了2天,但是找不到任何真正的解决方案或解释为什么会发生这种情况。我知道在SO和其他地方有相关的帖子,但它们没有提供任何帮助。我已经阅读了苹果文档。
我的应用程序中有普通和@2x图像。它们的命名正确(edit_image.png和edit_image@2x.png)。它们的大小正确(普通大小为60x60,@2x大小为120x120)。它们都被复制到应用程序包中,并且当我检查其内容时,可以在根目录中看到它们。
我通过调用[UIImage imageNamed:@"edit_image"]来获取图像。它从未获取2x图像。它只看到1x图像。但是,如果我先检查比例并使用以下代码:
if ([[UIScreen mainScreen] scale] == 1) {
    NSLog(@"test");
    editImage = [UIImage imageNamed:@"edit_image"];
} else {
    editImage = [UIImage imageNamed:@"edit_image@2x"];
}

然后它确实获取了正确的图像。我已经尝试了所有方法。我从项目中删除了高分辨率图像,清理了缓存,重新添加了高分辨率图像,再次清理并构建,但仍然不行。我删除了所有图像,重新添加了它们,但还是不行。我已经尽我所能去做了所有事情。这到底是怎么回事?


你试过包含文件扩展名来调用它吗?例如[UIImage imageNamed:@"edit_image.png"]。 - Sharjeel Aziz
我假设你是在 iPhone 4 设备上(而不是模拟器)复现这个问题,因为只有该设备能够显示 @2x 图像。但我没有看到任何地方指明这一点。 - Shaggy Frog
它应该可以,但有时模拟器会出现设备没有的错误,反之亦然。 - Shaggy Frog
是的。这两张图片都是从同一张原始图片创建的,只是调整了大小。 - Gordon Fontenot
1
我正在为完全相同的问题苦苦挣扎。是否找到了解决方案? - Axeva
显示剩余6条评论
4个回答

4
你是否正在创建适用于iPhone和iPad的通用应用程序。如果有通用应用程序,那么您需要创建3组图像:
1) edit_image~iPad.png
2) edit_image~iphone.png
3) edit_image@2x~iphone.png
每个图像的分辨率都为72像素/英寸。而对于该@ 2x图像,您需要提供双倍大小,我认为您已经完成了此操作。
现在,请尝试以下代码。
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"edit_image" ofType:@"png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];

重要提示:当创建高分辨率版本的图像时,请将新版本放置在应用程序捆绑包中与原始版本相同的位置。
来源:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/SupportingResolutionIndependence/SupportingResolutionIndependence.html

不,这不是一个通用应用程序。它只适用于iPhone和iPod。高分辨率版本与原始版本完全相同。 - Gordon Fontenot
好的,这里不需要添加device_modifier(如ipad或iphone)。只需删除项目的构建目录。还要从XCode菜单中清空缓存。从.xcodeproj目录中删除所有.mode1v3和.pbxuser文件。我建议您尝试上面的代码。并告诉我它是否有效。另外,我假设您正在使用最新版本的SDK 4.1,并且没有使用GM Seed或BETA版本。那么它应该百分之百有效。 - Sagar
这个UIImage类别可能会有所帮助:https://github.com/nesterow/TouchCustoms/blob/master/Classes/UIImage+UniversalApp.h https://github.com/nesterow/TouchCustoms/blob/master/Classes/UIImage+UniversalApp.m - Sagar

1

我犯过的两个愚蠢错误可能会导致这个问题:

  1. 不小心将小版本命名为@2x而不是大版本
  2. 大版本大小略微不正确(多或少一个像素)

不犯这些错误。当我明确加载@2x版本时,我得到了正确的图像。 - Gordon Fontenot

0

我曾经遇到过完全相同的问题,最终在搜索了两天后找到了解决方案。

在我的情况下,@2x 图像的名称与普通大小的图像不完全匹配:tileSet.pngtileset@2x.png

导致这个问题很难发现的原因是 @2x 文件在 Finder 和 XCode 中的名称确实是正确的。我只能通过在 Preview 中打开图像并查看 Inspector 来发现问题。我不太了解 Mac 文件系统,无法解释这是如何发生的,但一旦我将文件重命名为乱码,然后重新命名为 tileSet@2x.png,一切都按预期工作了。


0

您不需要添加"@2x",也不需要if-else逻辑。只需使用[UIImage imageNamed:@"edit_image"]


但是OP说这并不会自动选择@2x图像。 - BoltClock
没错。这就是问题所在。我知道 if-else 逻辑是多余的。但是我没有其他方法能够选择 @2x 图像。 - Gordon Fontenot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接