以编程方式加载视网膜(高质量)图像(在按钮上)

时间:2012-05-28 10:19:05

标签: ios

我遇到了一个我无法弄清楚的问题。我有一个应用程序完成,将从前面拍摄一张照片,从后置照相机拍摄一张照片,然后将它们合并在一起。

该应用的名称是 GroupCam

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

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

请检查以下图片:

第一个屏幕:只有右上角按钮显示失真,因为我正在检查相机闪光灯的值并以编程方式“加载”相应的图像。

First Screen

第二个屏幕:用户已移至另一个屏幕并返回第一个屏幕,所有按钮都重新加载,现在看起来都变形了。

Second Screen

为什么会这样?

编辑:

这是我加载图片的方式。

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

我在互联网上的某处读到,这样做会自动加载最合适的图像版本。

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

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

3 个答案:

答案 0 :(得分:4)

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

我的实际问题,我已经设置了

<uibutton_superview>.layer.shouldRasterize = YES;

如果任何按钮祖先都有此设置,则可能是您的问题。

答案 1 :(得分:3)

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

答案 2 :(得分:3)

图像文件名的情况在模拟器上无关紧要,但在设备上也是如此。

使用所有一致的案例。 Image.png和image@2x.png被识别并将在模拟器中协同工作,但不能在设备上协同工作。使用image.png和image@2x.png。或者,只要大小写匹配,您也可以使用.jpg。