如果您有一个在非视网膜设备上运行良好的应用程序,然后您将其部署在视网膜设备上,而没有提供必要的@2x 图像,可能会出现什么副作用?内存使用率高?应用程序崩溃?
3 回答
不,你提到的事件不会发生。但是,显然您的图像看起来很糟糕,因为它们无法正确缩放(因此它们将被像素化并且尺寸不正确等)。
不使用视网膜图像没有任何意义——您所要做的就是在图像中添加@2x 并将图像大小加倍,它们将针对非视网膜和视网膜显示正确缩放。
如果您不包含@2x 图像,则设备会自动在视网膜设备上拉伸图像以占用相同的房间(放大图像)。
UIKit 使用的缩放方法不做任何插值。相反,它只是将每个像素的大小加倍(“最近邻”缩放)。对于带有硬边的正方形图像,效果很好。但是,对于照片或大多数艺术品,图像最终看起来非常像素化(有伪影)。
由于采用了简单的缩放方法,因此在 Retina 设备上放大图像并不是性能密集型的。它不太可能影响性能,只会影响图像质量。
如果您仅包含高分辨率图像,则它们不会针对非视网膜设备自动缩小。相反,例如,对于 UIImageView,您可以将视图模式设置为 Scale to Fill,以便图像缩小以适合框架。然而,同样,UIKit 使用最近的邻居,但是当按比例缩小时,伪影不太明显。
较新的视网膜设备性能更高,因此它们能够以与非视网膜设备处理低分辨率图像相同的速度处理高分辨率图像,并且放大图像对它们来说是微不足道的。但是,较旧的非视网膜设备在处理高分辨率图像时会更慢,这需要更多内存和更多图形处理能力,尤其是因为它还必须按比例缩小它们。
如果您在 UITableView 中有高分辨率图像,这将非常明显。您的 Retina 设备将非常流畅地滚动表格,而您会注意到非 Retina 设备上的一些抖动。它不会崩溃,只是不会平滑。如果用户体验太差,您的应用可能会被拒绝。对于静态的、非移动的图像,不太可能存在明显的性能差异。
如果您的捆绑包中有空间,则应包括视网膜和非视网膜图像。即使您只是在像 Photoshop 这样漂亮的照片编辑器中将图像大小翻倍来创建 @2x 图像,图像的质量也会比 UIKit 生成的要好得多。
请记住,如果您的压缩应用包超过 50 MB,则只能通过 WiFi 从 App Store 下载。PNG 和 JPEG 压缩得不多,因为它们已经被压缩了。这就是您可能选择仅包含高分辨率图像的原因之一(以减小应用程序包的大小,特别是对于通用应用程序,您最终可能会拥有 4 组图像)。
当然,您可以只提供视网膜图像,甚至只提供非视网膜图像。
几个月前,我们对这个问题进行了一些测试。
正如预期的那样,只有非视网膜图像导致图形质量不佳。即使是未经训练的眼睛也能注意到模糊。
Only retina images: it works. But memory footprint is bigger (for non-retina devices that would otherwise load non-retina images) and some lag could be noticed. Though we had to measure it to be sure.
To answer your question: zenith provided the answer. If you only provide non-retina images the graphics on retina devices will be blurry, but no low-memory condition could emerge because of this.
EDIT:
Unless you are doing some kind of research on graphics capabilities of different iOS devices i'd strongly suggest to provide both types of images: retina and non-retina.
If your designer is giving you hard time because of this you can do few things:
- get a new designer
- provide him some kind of tool to make his job easier: Unretiner for example