iOS 应用非视网膜和视网膜图像概念

Posted

技术标签:

【中文标题】iOS 应用非视网膜和视网膜图像概念【英文标题】:iOS app non-retina and retina images concept 【发布时间】:2013-07-19 04:45:55 【问题描述】:

我问这个问题只是为了提供信息并澄清我对ios 应用程序(Retinanon-retina 设备)中图像的概念。

我目前做的是

当我开发一个iPhone 应用程序并且我必须在UIButton 上使用Interface builder 显示图像时,我拍摄了两张图像,假设submit.png 按钮图像具有以下尺寸

    100x100 像素 (submit.png) 200x200 px (submit@2x.png) 用于视网膜显示

Interface builder 中,我将UIButton 的大小设置为100x100 px,它可以完美地工作。

问题:

我们为什么不只放置单个图像,比如说 submit.png

    200x200 像素 (submit.png)

并在interface builder 中设置UIButton 大小为100x100 像素,retinanon-retina 设备将使用相同的图像。

使用两张图片而不是一张视网膜大小的图片的真正原因是什么?

另一个类似的问题,

iPhone 5 仅在retina 显示中可用,但我们必须将其Default 图像放置为Default-568h@2x.png。为什么是 2 倍?

【问题讨论】:

您是否尝试过删除普通图像并直接在界面生成器上提供视网膜图像。即通过界面生成器直接在 UIButton 上分配 submit@2x.png。我们通常会这样做,并且它可以在正常设备中正常工作,因为我猜 UIButton 的大小会相同 是的,我通常会像你提到的那样做,但我想知道为什么 Apple 文档说要使用两个不同的图像,但我仍然无法获得任何真实的来源信息。 【参考方案1】:

如果您阅读此文档Custom Icon and Image Creation Guidelines,则在 ios 中图像的概念也很清楚

例如,如果你想创建图像

100 x 100 像素 所以它必须具有 163 分辨率 ppi submit.png NON-retina device

200 x 200 px 所以它必须具有 326 分辨率 ppi submit@2x.png Retina device

对于 iPad:-

400 x 300 px 所以它必须具有 264 分辨率 ppi submit@2x~ipad.png Retina iPad device

200 x 150 px 所以它必须具有 132 分辨率 ppi submit~ipad.png Non-retina iPad device

看看这张图片:-

图片来源来自This

当我们想为 iPad 和 iPhone 指定不同版本的图像时,我们反复灌输 @2x。为高分辨率图像包含 @2x 修饰符是新的,它让系统知道该图像是标准图像的高分辨率变体。

这是操作系统调整窗口大小以填充 iPhone 5 显示屏所需的关键更改。已发布 writeup 来说明此调整以及您可能需要进行的其他与大小相关的调整。

希望这是对图像分辨率及其大小有用的信息。

【讨论】:

您能告诉我您从哪里获得有关分辨率的信息吗?比如 iPhone 的 163 和 326 分辨率。正如我的设计师设计的视网膜尺寸为 72 DPI,然后使用相同的 DPI 缩小图像并将图像转换为非视网膜尺寸。 apple.com/iphone/specs.html 看看这是苹果 iphone5 产品 1136 x 640 像素分辨率,326 ppi 所以非 Ratine 将其限制为 163 的一半 这是什么意思?我们应该为视网膜设计 320x480 像素大小、326DPI 和 320x480 像素大小、普通设备 163 DPI 的应用程序?或者我们应该为正常设计 72DPI 尺寸为 320x480 像素,为视网膜设计 72DPI 尺寸为 640x960 像素? 我在讨论 ** PPI ** 我们应该设计 320x480 像素大小的应用程序,视网膜 326 ppi 和 320x480 像素大小,163 PPI 你知道 DPI 和 PPI 有什么不同吗... ?检查这个:-imagescience.com.au/kb/questions/31/… 向您的设计师询问有关 DPI 和 PPI 的更多信息【参考方案2】:

使用非视网膜图像的主要目的是由于所需的缩小操作,在旧设备上提高性能和图像质量。

因此,对于旧设备的性能,您应该使用非视网膜图像。

【讨论】:

有什么解决方案可以让我们只能将一个图像用于旧版本和新版本。我的意思是我们可以用任何类型的代码或其他东西来做吗?? 我认为没有。因为我们需要旧设备的非视网膜图像。如果我们使用视网膜图像,性能就会下降。 这意味着我们必须有两种类型的图像,一种是非视网膜图像,另一种是视网膜,如果应用程序需要在旧设备中支持。 这两张图片有什么区别。只是分辨率不同。但是对于今天的新设备。我们真的也需要非缩放图像吗?【参考方案3】:

之所以必须提供 2 张图像,是因为仍有人在运行不支持视网膜显示的早期设备。由于运行视网膜的人,它们缺乏像素数量,因此我们提供正常数量。 iphone 5 要求图像文件中的@2x 是因为@2x 文件名是处理视网膜显示图像的标准约定。

这就是为什么当你问我们为什么不把 200x200 的图像放在 100x100 按钮中的原因。好吧,如果你正在运行一个视网膜设备,那个按钮中的图像看起来就像你画的那样;但是,如果您运行的是没有视网膜的 3gs 之类的东西,那么您在该按钮中的图像很可能会变得非常块状或模糊,因为像素与设备的比例不匹配。

希望这有助于清除任何问题!

【讨论】:

【参考方案4】:

是的,您可以只将视网膜图像用于视网膜和非视网膜设备。如果您在imageviews、按钮等中使用它们,请将它们设为scaletofill/aspectfill/aspectfit 或任何您想要的。

但这样做的问题是,不必要的大尺寸图像会被加载到内存中,并且图像的大小调整也需要一些处理。

使用单独的图像确实会增加 App Bundle 的大小,但会减少应用程序在运行时的实际内存使用量。

【讨论】:

【参考方案5】:

1- 如果您想支持您的应用程序同时支持 Retina 和非 Retina 设备,您需要遵循文件名标准。如果您只想支持视网膜设备,则无需添加默认图像(button.png)。如果您想同时支持 Retina 和非 Retina 设备,则需要添加两个图像以及在界面生成器中不需要添加像 @2x 这样的全名。您只需添加图像的名称。主要的基础是两个图像的名称应该相同。 Ex: Non retina-->Button.pngRetina-->Button@2x.pngIE-->Button

2 - iPhone5 仅具有视网膜显示屏。因此,如果您为 iPhone5 添加默认图像,它会自动在 iPhone5 设备中运行。苹果正在遵循这些标准。所以我们需要跟进。

注意: Xcode 会自动处理所有这些类型的图像。

【讨论】:

以上是关于iOS 应用非视网膜和视网膜图像概念的主要内容,如果未能解决你的问题,请参考以下文章

如何在资产目录新图像集中删除所有 iPhone/iPad 视网膜/非视网膜图像

没有视网膜图像的新应用程序提交

iOS UI 自定义按钮图片

UITabbar ios的背景图

iPad 视网膜在 Cocos2d 中拉伸非视网膜图像

我必须在 SpriteKit 应用程序中包含非视网膜纹理吗?