2012-05-28 42 views
5

我有一个问题,我只是无法弄清楚。我已经完成了一个应用程序,它将从正面拍摄一张照片,并从后置照相机拍摄一张照片,然后将它们合并在一起。以编程方式加载视网膜(高质量)图像(在按钮上)

应用程序的名称是GroupCam

但是我在我的UIButtons不会被加载从一开始就视网膜图像的问题。如果我在界面生成器上将它们设置为@ 2x,它们确实以高质量出现,但是一旦我以编程方式重新加载它们,低版本就会出现。

这是由于以下事实:拍摄照片并且屏幕改变按钮图像改变,但是当用户按下后退按钮时,相机图标看起来很可怕(因为正在加载低质量版本) 。

请检查下面的图片:

第一屏:显示只有右上角的按钮扭曲,因为我检查相机闪光灯的价值和“加载”编程相应的图像。

First Screen

第二个屏幕:用户移动到另一个画面,又重新回到了第一个,所有按钮都重新加载,他们现在都看起来失真。

Second Screen

如果任何人有为什么会这样我会很感激的任何想法!

谢谢。

编辑:

这是我如何加载图像。

[self.flashButton setImage:[UIImage imageNamed:@"flashOff"] 
          forState:UIControlStateNormal]; 

我在网上的某个地方看过,这样做会自动加载最合适的图像版本。

我也试过,但结果是一样的:

[self.takeButton setImage:[UIImage imageNamed:@"takePhoto.png"] forState:UIControlStateNormal]; 
+1

我在应用程序中使用正常和视网膜图像的效果很好。所以我建议你做的是选择这些图像的正常分辨率,而不是将它们包括在你的项目中(通过第三个最右边的窗格 - 只需取消选择复选框)。现在你的应用程序只有视网膜图像。那么,如果事情变坏,那么你的应用程序中的东西就搞砸了。 [UIImage imageNamed:foo.png]存在一些问题。如果您更改该图像,该图像的所有后续用户都将获得修改后的图像。重新读取UIImage imageNamed: –

+2

所以我只是重新读你的问题,我刚刚看到这样的说法:“如果我在接口生成器上将它们设置为”@ 2x“”。因此,在IB中,您输入了他们的名字“[email protected]”,这是有效的。所以我可以想到的唯一的事情是你的问题可能是“@ 2x”的格式。你是否确定你已经正确地命名了这些图像 - “[email protected]”,NOT&2x.png等。看起来好像iOS没有看到hi rez文件,这是我能想到的唯一原因,这将解释它。所以请尝试删除IB中的“@ 2x”,看看会发生什么。我敢打赌,你一直都会得到所有低雷兹。 –

+0

是的,它们被格式化并命名正确。这些图像将以HD完美加载,唯一的问题是当我以编程方式加载它们时。 iOS决定加载低分辨率的。 – Pochi

回答

3

如果您的应用程序正在从前面摄像头的图片,一条来自背面的摄像头和将它们合并在一起,那么设备需要前面对相机。所有拥有前置摄像头的iOS设备也都具有视网膜显示屏(只要您没有为iPad 2开发,但这是一个不同的故事),因此您根本不必拥有正常的图像,因此所有图像都应该是视网膜图像。如果没有正常的图像,那么这个问题根本不应该发生。做一个备份副本,并尝试删除所有正常的图像,然后尝试。因为你使用UIImage imageNamed:@“ImageName”,就像你说的那样,应该自动选择图像!祝你好运!

+0

我有点希望找到发生这种情况的原因,但这似乎是一个解决方案。 – Pochi

+0

@LuisOscar对不起,这是我最好的猜测:(尝试在bugreport.apple.com上报告错误。 – sridvijay

4

首先,它可能值得验证低分辨率版本实际上正在显示。我最近跳到了一个类似的假设,用不同的东西替换了低分辨率图像,并确认高分辨率版本实际上仍在显示,但被扭曲。

我实际的问题,我已经建立

<uibutton_superview>.layer.shouldRasterize = YES;

如果任何按钮的祖先有这个设置的,它有可能成为你的问题。

3

模拟器上的图像文件名的情况并不重要,但在设备上。

使用所有一致的情况。 Image.png和[email protected]被识别并且将在模拟器中一起工作,但不在设备上。使用image.png和[email protected]。或者,只要大小写匹配,您也可以使用.jpg。

相关问题