我正在开发一个iPhone应用,目标是iOS 4.0或更高版本。我想向UIImageView添加一张JPEG格式的图片。目前我已经完成了以下步骤...
UIImageView *bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 246.0)];
bgImageView.image = [UIImage imageNamed:@"background"];
[self.view addSubview:bgImageView];
[bgImageView release];
我添加了两个图片,
- background.jpg(普通1x图像)
- background@2x.jpg(适用于2x / retina显示的图像)。
但是当我构建和运行时,一切都正常运行,除了没有背景。我的所有其他小部件都在那里,但有一个白色背景,并且图像没有显示。
接下来,我为我的背景创建了两个png图像,将其添加到项目中并运行。这次我的背景被显示出来了。我感到困惑,因为根据文档,jpg图像可以在iPhone上使用UIImage。
我再次尝试使用我的jpg图像,并将上面的代码更改为:
UIImageView *bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 246.0)];
bgImageView.image = [UIImage imageNamed:@"background.jpg"]; //added extension
[self.view addSubview:bgImageView];
[bgImageView release];
当我运行上面的代码时,背景图片显示出来了,但是2x图片没有加载。这说明我的jpg图片没问题,不是罪魁祸首。所以当我只给出图片名称而不带扩展名时,在相应的设备上会加载png文件(1x和2x),而根本不会加载jpg文件。 看起来像是一个bug(无论是sdk还是文档)。iOS 4已经好几年了,为什么没有人注意到呢?除了将所有图片转换为png之外,我还有其他选择吗?
编辑:
好吧,问题已经过去两天了,没有答案。我已经将所有的图片都转换成了png,我的项目也完成了(因为我的项目不能等待...)。不过,为了自己和未来遇到这个问题的人,我想更多地了解这个问题。至少有人可以确认这确实是苹果的一个bug。我开始设置赏金,以便更多的人可以看到这个线程。
再次编辑:
离这个赏金结束还有2天。感谢所有回答的人。但是让我澄清一件事情。我已经说过我已经将所有的图片都转换成了png,并且继续前进。我只想确认
imageNamed
是否以相同的方式处理jpg和png文件。文档肯定会这样说(除非苹果在UIImage
文档之外的其他地方写了),如果文档是正确的,那么我的代码失败了,有两个可能的原因。
imageNamed
中存在一个错误。如果这是原因,那么我除了提交错误报告、将我的图片更改为png或编写一个包装器(就像Chandan在他的答案中所说的那样)并继续前进之外,没有太多的选择。- 我使用的jpeg图像存在一些问题。好吧,我不是一个photoshop专家。但我使用了RGBA jpg图像。如果图像确实有问题,我准备询问我的设计师朋友并提供更多信息。
还有一件事。这篇文章只是讲述了这个问题。但他不知道背后的原因。所以我不是孤单的。
编辑:结束
嗯,这与图像本身有关。我谷歌搜索并下载了一些示例jpeg图像并进行了测试。其中一些显示正确,而另一些则没有。由于时间限制已到,我将把边界交给PengOne,他尝试重现了这个错误并成功加载了没有扩展名的jpg图像,从而让我使用更多的图像。感谢每个试图帮助我的人。
@2x
的问题。 :) - akashivskyy