苹果官网称分辨率为1080p:1920 x 1080
但是,Xcode(今天推出的 8.0 GM)所需的启动屏幕是 2208 x 1242。
谁是对的?
苹果官网称分辨率为1080p:1920 x 1080
但是,Xcode(今天推出的 8.0 GM)所需的启动屏幕是 2208 x 1242。
谁是对的?
iPhone 6+ 在内部使用@3x资源以2208×1242(736x414点)的虚拟分辨率进行渲染,然后对其进行采样以进行显示。就像在 Retina MacBook 上使用缩放分辨率一样——它可以让它们达到像素资产的整数倍,同时仍然让例如 12 pt 文本在屏幕上看起来相同大小。
所以,是的,启动屏幕需要是那个大小。
6、5s、5、4s 和 4 都是每英寸 326 像素,并使用@2x 资产来坚持之前所有设备的每英寸大约 160 点。
6+ 是每英寸 401 像素。所以假设它需要大约 2.46 倍的资产。相反,Apple 使用 @3x 资产并将完整输出缩减到其自然规模的 84% 左右。
在实践中,Apple 决定采用 87% 左右的比例,将 1080 变成 1242。毫无疑问,这是为了找到尽可能接近 84% 的值,但仍能在两个方向上产生整数尺寸——1242/1080 = 2208/1920 正好,而如果您将 1080 转换为 1286,则您需要以某种方式垂直渲染 2286.22 像素才能很好地缩放。
答案是旧应用程序在 2208 x 1242 缩放模式下运行。但是,当为新手机构建应用程序时,可用的分辨率为:Super Retina HD 5.8 (iPhone X) 1125 x 2436 (458ppi)、Retina HD 5.5 ( iPhone 6、7、8 Plus ) 1242 x 2208和Retina HD 4.7 ( iPhone 6 ) 750 x 1334。这导致了问题中提到的混乱。要构建使用新手机全屏尺寸的应用,请添加以下尺寸的 LaunchImage:1125 x 2436、1242 x 2208、2208 x 1242 和 750 x 1334。
iPhone 12 Pro Max的尺寸, @3x缩放,坐标空间:428 x 926点和1284 x 2778像素,458 ppi,设备物理尺寸为 3.07 x 6.33 英寸或 78.1 x 160.8 毫米。6.7 英寸超视网膜 XDR 显示屏。
iPhone 12 Pro的尺寸, @3x缩放,坐标空间:390 x 844点和1170 x 2532像素,460 ppi,设备物理尺寸为 2.82 x 5.78 英寸或 71.5 x 146.7 毫米。6.1 英寸超视网膜 XDR 显示屏。
iPhone 12的尺寸, @2x缩放,坐标空间:585 x 1266点和1170 x 2532像素,460 ppi,设备物理尺寸为 2.82 x 5.78 英寸或 71.5 x 146.7 毫米。6.1 英寸超视网膜 XDR 显示屏。
iPhone 12 mini的尺寸, @2x缩放,坐标空间:540 x 1170点和1080 x 2340像素,476 ppi,设备物理尺寸为 2.53 x 5.18 英寸或 64.2 x 131.5 毫米。5.4 英寸超视网膜 XDR 显示屏。
iPhone 11 Pro Max的尺寸, @3x缩放,坐标空间:414 x 896点和1242 x 2688像素,458 ppi,设备物理尺寸为 3.06 x 6.22 英寸或 77.8 x 158.0 毫米。6.5 英寸超视网膜 XDR 显示屏。
iPhone 11 Pro的尺寸, @3x缩放,坐标空间:375 x 812点和1125 x 2436像素,458 ppi,设备物理尺寸为 2.81 x 5.67 英寸或 71.4 x 144.0 毫米。5.8 英寸超视网膜 XDR 显示屏。
iPhone 11的尺寸, @2x缩放,坐标空间:414 x 896点和828 x 1792像素,326 ppi,设备物理尺寸为 2.98 x 5.94 英寸或 75.7 x 150.9 毫米。6.1 英寸液态视网膜高清显示屏。
iPhone X Max尺寸@3x缩放(Apple 名称:Super Retina HD 6.5 display"),坐标空间:414 x 896点和1242 x 2688像素,458 ppi,设备物理尺寸为 3.05 x 6.20 英寸或 77.4 x 157.5 毫米.
let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X Max Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 1242.0, 2688.0), scale: 3.0
iPhone X尺寸@2x缩放(Apple 名称:Super Retina HD 6.1" display),坐标空间:414 x 896点和828 x 1792像素,326 ppi,设备物理尺寸为 2.98 x 5.94 英寸或 75.7 x 150.9 毫米。
let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 828.0, 1792.0), scale: 2.0
iPhone X和iPhone X尺寸@3x缩放(Apple 名称:Super Retina HD 5.8" display),坐标空间:375 x 812点和1125 x 2436像素,458 ppi,设备物理尺寸为 2.79 x 5.65 英寸或 70.9 x 143.6 毫米。
let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X and X Screen bounds: (0.0, 0.0, 375.0, 812.0), Screen resolution: (0.0, 0.0, 1125.0, 2436.0), scale: 3.0
iPhone 6、6S、7 和 8的尺寸, @3x缩放(Apple 名称:Retina HD 5.5),坐标空间:414 x 736点和1242 x 2208像素,401 ppi,屏幕物理尺寸为 2.7 x 4.8 英寸或68 x 122 毫米。在缩放模式下运行时,即在 iPhone 6 Plus 上没有新的 LaunchImages 或在设置中选择时,原生比例为 2.88,屏幕为 320 x 568 点,这是 iPhone 5 的原生尺寸:
Screen bounds: {{0, 0}, {414, 736}}, Screen resolution: <UIScreen: 0x7f97fad330b0; bounds = {{0, 0}, {414, 736}};
mode = <UIScreenMode: 0x7f97fae1ce00; size = 1242.000000 x 2208.000000>>, scale: 3.000000, nativeScale: 3.000000
iPhone 6和iPhone 6S的尺寸,@2x 缩放(Apple 名称:Retina HD 4.7),坐标空间:375 x 667点和750 x 1334像素,326 ppi,屏幕物理尺寸为 2.3 x 4.1 英寸或58 x 104 毫米。在缩放模式下运行时,即没有新的 LaunchImages,屏幕为 320 x 568 点,这是 iPhone 5 的原生尺寸:
Screen bounds: {{0, 0}, {375, 667}}, Screen resolution: <UIScreen: 0x7fa01b5182d0; bounds = {{0, 0}, {375, 667}};
mode = <UIScreenMode: 0x7fa01b711760; size = 750.000000 x 1334.000000>>, scale: 2.000000, nativeScale: 2.000000
相比之下,iPhone 5为 640 x 1136,iPhone 4 640 x 960。
这是我用来检查的代码(请注意,nativeScale 仅在 iOS 8 上运行):
UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);
注意:上传 LaunchImages 否则应用程序将在缩放模式下运行,并且不会显示正确的缩放比例或屏幕尺寸。在缩放模式下nativeScale
和scale
将不一样。在实际设备上,iPhone 6 Plus 上的比例可以是 2.608,即使它没有在缩放模式下运行,但在模拟器上运行时会显示 3.0 的比例。
真实/物理 iPhone 6 Plus 分辨率为 1920x1080,但在 Xcode 中,您将界面设置为 2208x1242 分辨率(736x414 点),并且在设备上它会自动缩小到 1920x1080 像素。
iPhone 分辨率快速参考:
Device Points Log. Res. Sc. Real Res. PPI Ratio Size
iPhone 12 Pro Max, 13 Pro Max 926x428 2778x1284 3x 2778x1284 458 19.5:9 6.7"
iPhone 12, 12 Pro, 13, 13 Pro 844x390 2532x1170 3x 2532x1170 460 19.5:9 6.1"
iPhone 12 mini, 13 mini 812x375 2436x1125 3x 2340x1080 476 19.5:9 5.4"
iPhone XS Max, 11 Pro Max 896x414 2688x1242 3x 2688x1242 458 19.5:9 6.5"
iPhone XR, 11 896x414 1792x828 2x 1792x828 326 19.5:9 6.1"
iPhone X, XS, 11 Pro 812x375 2436x1125 3x 2436x1125 458 19.5:9 5.8"
iPhone 6+, 6S+, 7+, 8+ 736x414 2208x1242 3x 1920x1080 401 16:9 5.5"
iPhone 6, 6S, 7, 8, SE2 667x375 1334x750 2x 1334x750 326 16:9 4.7"
iPhone 5, 5S, 5C, SE1 568x320 1136x640 2x 1136x640 326 16:9 4.0"
iPhone 4, 4S 480x320 960x640 2x 960x640 326 3:2 3.5"
iPhone 3GS 480x320 480x320 1x 480x320 163 3:2 3.5"
您可能应该停止在 iOS 8 中使用启动图像并使用情节提要或 nib/xib。
在Xcode 6中,打开File
菜单并选择New
⟶ File...
⟶ iOS
⟶ User Interface
⟶ Launch Screen
。
然后通过单击打开项目的设置。
在General
选项卡中,在名为 的部分中App Icons and Launch Images
,将 设置Launch Screen File
为您刚刚创建的文件(这将设置UILaunchStoryboardName
在 中info.plist
)。
请注意,模拟器暂时只会显示黑屏,所以需要在真机上进行测试。
将 Launch Screen xib 文件添加到您的项目中:
将项目配置为使用 Launch Screen xib 文件而不是资产目录:
在物理设备上,iPhone 6 Plus 的主屏幕边界是2208x1242,nativeBounds 是1920x1080。调整到物理显示器的大小涉及到硬件缩放。
在模拟器上,iPhone 6 Plus 的主屏幕 bounds 和 nativeBounds 都是 2208x1242。
换句话说...视频、OpenGL 和其他基于CALayers
像素处理的东西将处理设备上真正的1920x1080帧缓冲区(或sim 上的2208x1242)。处理点的事情UIKit
将处理2208x1242 (x3) 边界并在设备上适当缩放。
模拟器无法访问在设备上进行缩放的相同硬件,并且在软件中模拟它并没有太大的好处,因为它们会产生与硬件不同的结果。nativeBounds
因此,将模拟设备的主屏幕设置为物理设备主屏幕的边界是有意义的。
iOS 8 为UIScreen
( nativeScale
and nativeBounds
) 添加了 API,让开发人员确定CADisplay
对应的分辨率UIScreen
。
对于像我这样想知道如何处理遗留应用程序的人,我在这个主题上做了一些测试和计算。
感谢@hannes-sverrisson 的提示,我开始假设旧版应用程序在 iPhone 6 和 iPhone 6 plus 中使用 320x568 视图处理。
bg@2x.png
测试是使用带有白色边框的简单黑色背景进行的。背景大小为 640x1136 像素,为黑色,内部白色边框为 1 像素。
下面是模拟器提供的截图:
在 iPhone 6 截图中,我们可以看到白色边框的顶部和底部有 1 个像素的边距,而在 iPhone 6 plus 截图上,我们可以看到 2 像素的边距。这在 iPhone 6 plus 上为我们提供了1242x2204 的已用空间,而不是 1242x2208,在 iPhone 6 上为 750x1332,而不是 750x1334。
我们可以假设这些坏点是为了尊重 iPhone 5 的纵横比:
iPhone 5 640 / 1136 = 0.5634
iPhone 6 (used) 750 / 1332 = 0.5631
iPhone 6 (real) 750 / 1334 = 0.5622
iPhone 6 plus (used) 1242 / 2204 = 0.5635
iPhone 6 plus (real) 1242 / 2208 = 0.5625
其次,重要的是要知道@2x 资源不仅会在 iPhone 6 plus(需要@3x 资产)上缩放,还会在 iPhone 6 上缩放。这可能是因为不缩放资源会导致意外的布局,因为到视图的放大。
但是,这种缩放在宽度和高度上并不相等。我尝试使用 264x264 @2x 资源。鉴于结果,我必须假设缩放比例与像素/点比成正比。
Device Width scale Computed width Screenshot width
iPhone 5 640 / 640 = 1.0 264 px
iPhone 6 750 / 640 = 1.171875 309.375 309 px
iPhone 6 plus 1242 / 640 = 1.940625 512.325 512 px
Device Height scale Computed height Screenshot height
iPhone 5 1136 / 1136 = 1.0 264 px
iPhone 6 1332 / 1136 = 1.172535 309.549 310 px
iPhone 6 plus 2204 / 1136 = 1.940141 512.197 512 px
重要的是要注意 iPhone 6 的缩放比例在宽度和高度(309x310) 上是不同的。这往往印证了上述理论,即缩放不是宽度和高度成比例的,而是使用像素/点的比例。
我希望这有帮助。
查看此信息图:http: //www.paintcodeapp.com/news/iphone-6-screens-demystified
它解释了旧 iPhone、iPhone 6 和 iPhone 6 Plus 之间的区别。您可以查看以点、渲染像素和物理像素为单位的屏幕尺寸比较。您还将在那里找到问题的答案:
iPhone 6 Plus - 配备高清视网膜显示屏。缩放因子为 3,然后图像从渲染的 2208 × 1242 像素缩小到 1920 × 1080 像素。
缩小比例为 1920 / 2208 = 1080 / 1242 = 20 / 23。这意味着原始渲染中的每 23 个像素必须映射到 20 个物理像素。换句话说,图像被缩小到其原始大小的大约 87%。
更新:
上面提到的信息图有一个更新版本。它包含有关屏幕分辨率差异的更多详细信息,并且涵盖了迄今为止的所有 iPhone 型号,包括 4 英寸设备。
http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
即使我一般不喜欢 John Gruber 的 Daring Fireball 博客的语气,但他的Larger iPhone Display Conjecture还是值得一读的。
他猜到了,但两种型号的分辨率(以点为单位)和以像素为单位的分辨率都完全正确,除了他(我也不)期望 Apple 构建更小分辨率的物理显示器并按比例缩小(详细信息在 @Tommy 的回答中)。
这一切的要点是,人们应该停止考虑像素,开始考虑点(这种情况已经有很长一段时间了,这不是最近的发明)以及由此产生的 UI 元素的物理尺寸。简而言之,两款新 iPhone 机型在这方面都有所改进,因为物理上大多数元素的尺寸保持不变,您可以在屏幕上放置更多元素(对于每个更大的屏幕,您可以放置更多元素)。
我只是有点失望,他们没有为更大的模型保留内部分辨率与实际屏幕分辨率 1:1 的映射。