为啥 iPhone 6 使用@2x 图片资源?

Posted

技术标签:

【中文标题】为啥 iPhone 6 使用@2x 图片资源?【英文标题】:Why does iPhone 6 use @2x image assets?为什么 iPhone 6 使用@2x 图片资源? 【发布时间】:2014-11-10 08:04:36 【问题描述】:

iPhone 6 plus 使用 @3x 图像资源,但 iPhone 6 使用 @2x 图像资源 - 只是比如 iPhone 4iPhone 5 (Image resolution for new iPhone 6 and 6+, @3x support added?)。

iPhone 5iPhone 5CiPhone 5S 的屏幕分辨率为 640x1136iPhone 6 的屏幕分辨率为 750x1334

那么 iPhone 6 会放大 640x1136 的图像吗?有什么方法可以为 iPhone 6 稍高的屏幕分辨率定制图形?

编辑: 我知道PPI是一样的。但是比如说我想让一个图像占据 iPhone 5 和 iPhone 6 上的所有可用宽度。我创建了一个 640x200 像素的图像并将其命名为 my_image@2x.png。在 iPhone 6 上,它会被放大到 750 像素宽度,不是吗?

【问题讨论】:

理论上,如果设备是 iPhone 6,您可以在运行时调整 imageNamed: 方法来专门选择 @3x(或带有任何其他符号的名称)图像,但是我不建议使用此路径生产应用程序。 收到了一些反对意见,但不知道为什么。请在投反对票时发表评论。谢谢! 值得一提的是,如果您使用自动布局,您的应用程序将在 iPhone 6 上拥有更多空间来显示内容。 (不是在谈论 6 Plus)如果不是,您的应用程序将被拉伸/缩放。这是为了支持任何使用基于点的 X 位置但没有意识到宽度可能超过 1136/568 的应用程序。 IE。希望按钮距离右边框 30 点的应用可能使用 538.0 的 X-pos。 @CraigOtis 一个不使用自动布局的应用程序不会被拉伸。您仍然可以在不同的屏幕尺寸下使用弹簧和支柱或手动布局。自动布局只是让事情变得更容易。 @RogerNolan 我的印象是,如果您不使用自动布局,您的应用会被“拉伸”以适应 6/6 Plus 屏幕?我有一个尚未更新为使用自动布局的应用程序,它似乎刚刚被“炸毁”,至少在模拟器中,以适应屏幕。 【参考方案1】:

iPhone 6 使用 @2x 图像资源而不是 R4 或其他东西,因为苹果没有为背景图像提供合适的 API!

现在最直接的方法是创建 2 个资源并以编程方式加载它们:(

看看这个:How to specify size for iPhone 6/7 customised edge-to-edge image?

【讨论】:

天哪,因为这个问题,我讨厌在我的应用中添加背景图片:(【参考方案2】:

iPhone 6 (not plus) 与 iPhone 4 - 5s 具有相同的 DPI,即 326 dpi。所以,2x 图像仍然是真实的。

【讨论】:

是的,但它有更多英寸。例如,我为@2x 创建了一个 640x200 像素的图像。在 iPhone 6 上,这个图像必须放大到 750 像素宽度,不是吗?还是有什么我没有得到的? 也许这会有所帮助:paintcodeapp.com/news/iphone-6-screens-demystified @NiklasBerglund 否。2x 设备上的 640x200 像素(非点)图像将以 320x100 点呈现。 iPhone 4 和 5 型号的宽度为 320 点。 iPhone 6 的宽度为 375 磅,因此除非您进行设置,否则图像不会填满屏幕宽度。 我明白了,因此某些图像在 iPhone 6 上会按比例缩小,因为它们没有缩放。仍然不明白为什么没有某种方法可以指定为 iPhone 6 的分辨率量身定制的图像。假设您有一个 640x200 像素的图像,您希望将其水平拉伸 100%。 @NiklasBerglund 因为 iPhone 6 中的额外像素 - 这不是关于拉伸图像,而是关于屏幕上的额外空间。如果您正在谈论应该拉伸的背景图片 - 没关系,并且 SDK 完全支持(resizableImageWithCapInsets:resizingMode: 方法)。如果没有,您将在此图像周围有额外的空间。更大的屏幕 - 更多的空间,利润!【参考方案3】:

Marat AL 是正确的,请参考this thread 添加到他的答案中

iPhone 6 可能具有不同的分辨率,但具有相同的每像素英寸密度 (PPI)

分辨率涉及像素的绝对数量。 密度(又名每英寸像素 - PPI)涉及每英寸的相对像素数,这在 iPhone 6 和之前的 iPhone 中是相同的,但在 iPhone 6 plus 中有所不同。

查看更多关于此here in this thread

因此 iPhone 6 使用与 iPhone 4、5 和 5S 相同的 @2x 图像。

This post 一定会解决您对 iPhone 6 分辨率的所有困惑

编辑

This post will helped me to understand better about pixelling and scaling iPhone 6 and 6 plus

【讨论】:

我仍然不明白为 640x1136 分辨率创建的图像如何在不放大的情况下以 750x1334 分辨率显示?我知道 iPhone 6 plus 会降低采样率,但 AFAIK iPhone 6 不会? 因此,当在 iPhone 5 和 iPhone 6 上使用 @2x 图像并更新您的应用程序以使用自动布局时,图像将占用相同数量的像素,但占用的物理空间更少屏幕上的空间? IE。如果它显示在表格行单元格的左侧,它可能只覆盖单元格最左侧的 10%,而不是最左侧的 15%,等等? @NiklasBerglund 它们将被放大除非您的应用使用自动布局将它们定位在相同的像素大小。这确实是一个难以理解的概念。 这是一个奇怪的情况——你如何设计@2x 图像以用作 100% 宽度的背景?我不知道。您最终必须知道可用的硬件像素,“它应该是 640 像素宽”或“750 像素宽”。你会选择 750 并让它在 iPhone 5 上缩小尺寸吗?还是 640 并在 iPhone 6 上升级?我没有这个非常好的问题的答案。 @CraigOtis 完全正确。图像在 iPhone 6 上会按比例缩小,但是当您想要 100% 的宽度或高度时,例如背景图像、横幅等占用 100% 宽度的图像怎么办?我找不到指定 iPhone 6 特定资产的方法。也许我应该创建另一个专门询问此问题的问题。如果必须以编程方式完成,我觉得有点奇怪。

以上是关于为啥 iPhone 6 使用@2x 图片资源?的主要内容,如果未能解决你的问题,请参考以下文章

iOS @2x @3x图的区别和理解

xcode中 Default-568h@2x 图片问题

如何使用资产目录作为导航栏背景图片?

ios开发的frame物理屏幕尺寸和图片分辨率

ThemeableBrowser在IOS中按钮图片的使用

iphone 4 闪屏大小