5

我有一个我无法弄清楚的问题。我已经完成了一个应用程序,它将从正面拍摄一张照片,从背面摄像头拍摄一张照片,然后将它们合并在一起。

该应用程序的名称是GroupCam

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

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

请检查以下图片:

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

第一个屏幕

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

第二屏

为什么会这样?

编辑:

这就是我加载图像的方式。

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

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

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

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

3 回答 3

4

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

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

<uibutton_superview>.layer.shouldRasterize = YES;

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

于 2012-07-19T10:17:43.640 回答
3

图像文件名的大小写在模拟器上无关紧要,但在设备上却很重要。

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

于 2012-07-24T19:20:16.427 回答
3

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

于 2012-07-19T01:50:24.077 回答