视网膜图像,非视网膜设备

时间:2013-06-27 18:05:47

标签: ios

我有一个可在iPhone和iPad上运行的应用程序,此应用程序的大多数预期设备都是除了iPad mini之外的视网膜设备。我有很多图片要包含在这个应用程序中。 我的问题是,如果我决定只使用@ 2x图像,iOS会将它们降级为非视网膜设备吗?所以我只发送视网膜图像?如果这是正确的,那么实施它是个坏主意吗?

3 个答案:

答案 0 :(得分:0)

iOS不会降级这些图片。但是,如果您仔细设置图像视图的帧,则不会产生任何问题。

答案 1 :(得分:0)

如果你的图片视图有contentMode = scale,你的图像将被缩放以在非视网膜上正确显示

但是存在一些问题:

1)如果您在非视网膜设备上显示缩放的视网膜图像,则图像边缘会模糊。因此,如果您想将此图像用于UI - 那将是个坏主意。

2)如果您只有@ 2x图像(例如在uibuttons中),有时xCode故事板无法正确缩放图像

答案 2 :(得分:0)

如果您要在Interface Builder中分配图像,并且将图像属性设置为UIImageViewimage@2x.png,则iOS将不会知道它是高分辨率的“2x”图像。实际上,在视网膜显示屏上,iOS会查找名为image@2x@2x.png的图像。由于它找不到它,它会将图像的比例因子设置为1.0。

contentMode属性(在XCode中只是“模式”)将决定是否出现任何图像缩放以适应UIImageView的约束。您可能希望将模式设置为“Aspect Fit”,以便根据视网膜和非视网膜显示器的需要缩放高分辨率图像。通常,图像将显示在Interface Builder中。

如果您使用UIImage的imageNamed或类似功能加载图片,只需指定image(其中“image.png”不存在,但“image@2x.png”确实存在),然后iOS实际上会在非视网膜显示器上找到图像,但比例因子将为1.0。和以前一样,您需要缩放它以适合您的视图。图像将在视网膜设备上正常工作,比例因子将设置为2.0,因为iOS首先查找“2x”图像,如果其他文件存在与否则无关紧要。

这是来自Apple关于imageNamed的文档:

  

在运行iOS 4或更高版本的设备上,如果是,则行为相同   设备的屏幕比例为1.0。如果屏幕的比例为2.0,   此方法首先搜索具有相同文件名的图像文件   附加一个@ 2x后缀。例如,如果文件的名称是   按钮,它首先搜索按钮@ 2x。如果找到2x,则加载   该图像并设置返回的UIImage对象的scale属性   到2.0。否则,它会加载未修改的文件名并设置比例   属性为1.0。有关详细信息,请参阅iOS应用程序编程指南   支持具有不同比例因子的图像。

如果可能的话,你真的应该包括视网膜和非视网膜图像。使用高于必要的高分辨率图像会对内存和性能产生负面影响。