我遇到了一个我无法弄清楚的问题。我有一个应用程序完成,将从前面拍摄一张照片,从后置照相机拍摄一张照片,然后将它们合并在一起。
该应用的名称是 GroupCam
但是我的问题在于我的UIButtons从一开始就不会作为视网膜图像加载。如果我在界面构建器上将它们设置为@ 2x它们确实以高质量出现,但是一旦我以编程方式重新加载它们,则会出现低版本。
这是因为在拍摄照片并且屏幕改变后按钮图像改变,但是当用户按下后退按钮时,相机图标看起来很糟糕(因为正在加载低质量版本)。
请检查以下图片:
第一个屏幕:只有右上角按钮显示失真,因为我正在检查相机闪光灯的值并以编程方式“加载”相应的图像。
第二个屏幕:用户已移至另一个屏幕并返回第一个屏幕,所有按钮都重新加载,现在看起来都变形了。
为什么会这样?
编辑:
这是我加载图片的方式。
[self.flashButton setImage:[UIImage imageNamed:@"flashOff"]
forState:UIControlStateNormal];
我在互联网上的某处读到,这样做会自动加载最合适的图像版本。
我也试过了,但结果是一样的:
[self.takeButton setImage:[UIImage imageNamed:@"takePhoto.png"] forState:UIControlStateNormal];
答案 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。