iPhone 6 Plus分辨率困惑:Xcode还是苹果的网站? 为发展

苹果的网站声称,该决议是1080p:1920×1080

然而,Xcode(今天推出的8.0 GM)所需的启动屏幕是2208 x 1242。

谁是对的?

Xcode中

iPhone 6+在虚拟分辨率为2208×1242736×414点)的情况下使用@ 3x资源进行内部渲染,然后将样品放下显示。 与在Retina MacBook上使用缩放分辨率相同 – 它可以让像素资产达到整数倍,同时仍然有12磅的文字在屏幕上看起来相同。

所以,是的,启动屏幕需要这样的大小。

math:

6,5,5,4和4都是每英寸326像素,并且使用@ 2x资产来坚持所有先前设备的每英寸约160点。

6+是每英寸401像素。 所以假设需要大约2.46倍的资产。 取而代之的是,苹果公司使用@ 3倍的资产,并将完整的产出缩减到自然规模的84%左右。

在实践中,苹果决定更喜欢87%,把1080变成1242.毫无疑问,这是find尽可能接近84%,仍然在两个方向产生整体大小 – 1242/1080 = 2208/1920确切,而如果你把1080转换成1286,那么你需要垂直渲染2286.22像素来很好地缩放。

答案是,较旧的应用程序运行在2208 x 1242缩放模式。 但是,当为新手机build立的应用程序可用的分辨率是: 超视网膜HD 5.8(iPhone X)的1125×2436(458ppi)视网膜高清5.5iPhone 6,7,8加1242×2208视网膜高清4.7 iPhone 6750 x 1334 。 这引起了问题中提到的混淆。 要构build使用新手机的全屏尺寸的应用程序,请添加尺寸为1125 x 2436,1242 x 2208,2208 x 1242和750 x 1334的LaunchImages。

尺寸为iPhone 3 X的尺寸(苹果名称: 超级视网膜高清 ),坐标空间: 375 x 812点和1125 x 2436像素,458 ppi,设备物理尺寸为2.79 x 5.65英寸或70.9 x 143.6毫米

(苹果名称: Retina HD 5.5 ),坐标空间: 414 x 736点和1242 x 2208像素,401 ppi,屏幕物理尺寸为2.7 x 4.8英寸或68 x 8英寸的iPhone 6,6S,7和8尺寸122毫米 。 当在缩放模式下运行时,即没有新的LaunchImages或在iPhone 6 Plus的安装程序中select,原生比例是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 6iPhone 6S (Apple名称: Retina HD 4.7 ),坐标空间: 375 x 667点, 750 x 1334像素,326 ppi,屏幕物理尺寸为2.3 x 4.1英寸或58 x 104毫米 。 当在缩放模式下运行,即没有新的LaunchImages时,屏幕是320×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×1136, iPhone 4 640×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,否则应用程序将在缩放模式下运行,不显示正确的缩放比例或屏幕尺寸。 在缩放模式下, nativeScalescale将不相同。 在实际的设备上,iPhone 6 Plus的缩放比例可以是2.608,即使它没有在缩放模式下运行,但在模拟器上运行时会显示3.0的缩放比例。

比较iPhone 6和6 Plus

真正的/物理的iPhone 6 Plus的分辨率是1920×1080,但在Xcode中,你的界面为2208×1242分辨率(736×414点),在设备上它会自动缩小到1920×1080像素。

iPhone的决议快速参考:

 Device Points Pixels Scale Physical Pixels Physical PPI Size iPhone X 812x375 2436x1125 3x 2436x1125 458 5.8" iPhone 6 Plus 736x414 2208x1242 3x 1920x1080 401 5.5" iPhone 6 667x375 1334x750 2x 1334x750 326 4.7" iPhone 5 568x320 1136x640 2x 1136x640 326 4.0" iPhone 4 480x320 960x640 2x 960x640 326 3.5" iPhone 3GS 480x320 480x320 1x 480x320 163 3.5" 

iPhone的决议

您应该停止在iOS 8中使用启动图像,并使用故事板或nib / xib。

  • Xcode 6中 ,打开File菜单并selectNewFile... ⟶iOS⟶ User InterfaceLaunch Screen

  • 然后通过点击打开项目的设置

  • 在“ General选项卡的“ App Icons and Launch Images ,将Launch Screen File设置为您刚刚创build的文件(这将在info.plist设置UILaunchStoryboardName )。

请注意,目前模拟器只会显示黑屏,所以您需要在真实设备上进行testing

将启动屏幕xib文件添加到您的项目中:

添加一个新的启动屏幕xib文件

configuration项目以使用启动屏幕xib文件而不是资产目录:

配置项目使用启动屏幕xob

在物理设备上,iPhone 6 Plus的主屏幕边界是2208×1242 ,nativeBounds是1920×1080 。 有硬件缩放涉及调整到物理显示。

在模拟器上,iPhone 6 Plus的主屏幕边界和nativeBounds都是2208×1242。

换句话说,video,OpenGL和基于CALayers其他处理像素的东西将会处理设备上的真实1920×1080帧缓冲区(或者SIM卡上的2208×1242 )。 处理UIKit点的事情将处理2208×1242 (x3)的边界,并在设备上适当缩放。

模拟器无法访问在设备上进行缩放的相同硬件,在软件中模拟它并没有什么好处,因为它们会产生与硬件不同的结果。 因此,将模拟设备的主屏幕的nativeBounds设置为物理设备主屏幕的边界是nativeBounds的。

iOS 8为UIScreennativeScalenativeBounds )添加了API,以便开发人员确定与UIScreen相对应的CADisplay的分辨率。

看看这个图表: http : //www.paintcodeapp.com/news/iphone-6-screens-demystified

它解释了旧iPhone,iPhone 6和iPhone 6 Plus之间的差异。 您可以看到屏幕尺寸的点,渲染像素和物理像素的比较。 你也会在那里find你的问题的答案:

iPhone 6 Plus – 具有Retina显示HD。 缩放因子是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

对于那些想知道遗留应用如何处理的人,我对这个主题做了一些testing和计算。

感谢@ hannes-sverrisson暗示,我开始假设在iPhone 6和iPhone 6 plus中使用320×568视图处理遗留应用程序。

testing是用一个简单的黑色背景bg@2x.png和一个白色的边框。 背景大小为640×1136像素,黑色,内部白色边框为1像素。

以下是模拟器提供的截图:

  • iPhone 5模拟器: http : //i.stack.imgur.com/b2E5K.png
  • iPhone 6模拟器: http : //i.stack.imgur.com/4Qz8N.png
  • iPhone 6 plus模拟器: http : //i.stack.imgur.com/hQisc.png

在iPhone 6屏幕截图上,我们可以看到白色边框顶部和底部的1像素边距,以及iPhone 6上的2像素边距加截图。 这使我们在iPhone 6上使用了1242×2204的空间,而不是在iPhone 6上的1242×2208和750×1332,而不是750×1334。

我们可以假设那些坏点是为了尊重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加上(预计@ 3x资产),而且可以在iPhone 6上扩展。这可能是因为不缩放资源会导致意想不到的布局到视野的扩大。

但是,这种缩放在宽度和高度上并不相同。 我用264×264 @ 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的缩放宽度和高度 (309×310) 不一样 。 这倾向于证实上述理论,缩放在宽度和高度上不成比例,但使用像素/点比例。

我希望这有帮助。

即使我一般不喜欢约翰·格鲁伯的“大胆的火球”博客的语气,他更大的iPhone显示猜想值得一读。

他猜对了,但是两种模式的分辨率都是以点数和像素为单位的,除非他们没有(我也没有)期望苹果build立一个更小的分辨率的物理显示器并缩小比例(细节在@汤米的答案中)。

其中的要点是,人们应该停止思考像素,并开始思考点(这已经是相当一段时间了,这不是一个最近的发明),并导致UI元素的物理尺寸。 简而言之,这两款新机型在这方面都有所改进,因为大多数元素的尺寸保持不变,您可以将更多的元素放在屏幕上(对于每个更大的屏幕可以适合更多)。

我只是有点失望,他们没有保持内部分辨率的映射到实际屏幕分辨率为1:1为更大的模型。