iPhone 6 Plus分辨率困惑:Xcode还是Apple's网站?发展

苹果官网称分辨率为1080p: 1920 x 1080

然而,Xcode (8.0 GM今天发布)要求的启动屏幕是2208 x 1242。

谁是对的?

Xcode

196697 次浏览

iPhone 6+内部渲染使用@3x资产,虚拟分辨率为2208×1242(带有736年x414点),然后采样显示。这与在Retina MacBook上使用缩放分辨率是一样的——它可以让他们在像素资产达到整数倍数的同时,仍然让12 pt的文本在屏幕上看起来相同大小。

所以,没错,发射屏幕需要这么大。

数学:

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

6+是每英寸401像素。所以假设它需要大约@2.46x资产。相反,苹果使用@3x资产,并将整个输出缩小到自然大小的84%左右。

实际上,苹果公司决定采用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)视网膜HD 5.5 (iPhone 6,7,8 Plus) 1242 x 2208视网膜HD 4.7 (iPhone 6) 750 x 1334。这就造成了问题中提到的混乱。要构建使用新手机全屏大小的应用程序,添加大小为1125 x 2436、1242 x 2208、2208 x 1242和750 x 1334的LaunchImages。


更新为新的iphone 12, 12 mini, 12 Pro, 12 Pro Max

尺寸为iPhone 12 Pro Max@3x缩放,坐标空间:428 x 926点和1284 x 2778像素,458 ppi,设备物理尺寸为3.07 x 6.33英寸或78.1 x 160.8毫米。超视网膜XDR显示。

尺寸为iPhone 12 Pro@3x缩放,坐标空间:390 x 844点和1170 x 2532像素,460 ppi,设备物理尺寸为2.82 x 5.78英寸或71.5 x 146.7毫米。超视网膜XDR显示。

尺寸为iPhone 12@2x缩放,坐标空间:585 x 1266点和1170 x 2532像素,460 ppi,设备物理尺寸为2.82 x 5.78英寸或71.5 x 146.7毫米。超视网膜XDR显示。

尺寸为iPhone 12 mini@2x缩放,坐标空间:540 x 1170点和1080 x 2340像素,476 ppi,设备物理尺寸为2.53 x 5.18英寸或64.2 x 131.5毫米。超视网膜XDR显示。


尺寸为iPhone 11 Pro Max@3x缩放,坐标空间:414 x 896点和1242 x 2688像素,458 ppi,设备物理尺寸为3.06 x 6.22英寸或77.8 x 158.0毫米。超视网膜XDR显示。

尺寸为iPhone 11 Pro@3x缩放,坐标空间:375 x 812点和1125 x 2436像素,458 ppi,设备物理尺寸为2.81 x 5.67英寸或71.4 x 144.0毫米。超视网膜XDR显示。

尺寸为iPhone 11@2x缩放,坐标空间:414 x 896点和828 x 1792像素,326 ppi,设备物理尺寸为2.98 x 5.94英寸或75.7 x 150.9毫米。液体视网膜高清显示器。

尺寸为iPhone X🅂Max@3x缩放(苹果名称:Super Retina HD 6.5显示"),坐标空间: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缩放(苹果名称:Super Retina HD 6.1"显示),坐标空间: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缩放(苹果名称:Super Retina HD 5.8"显示),坐标空间: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

enter image description here

尺寸为iPhone 6、6S、7和8@3x缩放(苹果名称:视网膜HD 5.5),坐标空间:414 x 736点和1242 x 2208像素,401 ppi,屏幕物理尺寸为2.7 x 4.8英寸或68 x 122毫米。当在缩放模式下运行时,即没有新的LaunchImages或在iPhone 6 Plus的设置中选择,本机尺寸为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 6 s以@2x缩放(苹果名称:视网膜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,否则应用程序将在缩放模式下运行,不会显示正确的缩放或屏幕大小。在缩放模式下,__ABC0和scale将不相同。在实际设备上,iPhone 6 Plus的比例可以是2.608,即使它不是在缩放模式下运行,但在模拟器上运行时,它将显示3.0的比例。

比较iPhone 6和6 Plus

在物理设备上,iPhone 6 Plus的主屏幕的bounds是< em > 2208 x1242 < / em >, nativeBounds是< em > 1920 x1080 < / em >。这涉及到硬件缩放,以调整物理显示的大小。

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

换句话说……视频、OpenGL和其他基于CALayers处理像素的东西将处理设备上真正的< em > 1920 x1080 < / em >帧缓冲区(或sim上的< em > 2208 x1242 < / em >)。处理UIKit中的点的事情将处理< em > 2208 x1242 < / em > (x3)边界,并在设备上适当缩放。

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

iOS 8向UIScreen (nativeScalenativeBounds)添加了API,让开发人员确定与UIScreen对应的CADisplay的分辨率。

即使我一般不喜欢约翰·格鲁伯的Daring Fireball博客的语气,他的更大的iPhone显示屏猜想还是值得一读的。

他猜,但得到完全正确的分辨率点和像素为两种型号,除了他(我也)不期望苹果建立一个更小的分辨率物理显示器和缩小(细节在@Tommy的回答)。

这一切的要点是,我们应该停止从像素的角度思考,而开始从点的角度思考(这种情况已经存在了很长一段时间,这不是最近的发明)以及UI元素的物理大小。简而言之,这两款新iPhone在这方面都有所改进,因为在物理上,大多数元素都保持了相同的尺寸,你可以在屏幕上容纳更多元素(屏幕越大,你可以容纳更多元素)。

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

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

  • Xcode 6中,打开File菜单,选择NewFile...iOSUser InterfaceLaunch Screen

  • 然后打开settings为你的项目点击它。

  • General选项卡中,在名为App Icons and Launch Images的部分中,将Launch Screen File设置为刚刚创建的文件(这将在info.plist中设置UILaunchStoryboardName)。

注意,模拟器暂时只会显示黑屏,所以你需要在真实设备上进行测试

添加一个启动屏幕xib文件到你的项目:

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

配置您的项目使用启动屏幕xib文件而不是资产目录:

配置项目使用启动屏幕xob

看看这张信息图: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

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"

iPhone分辨率

对于那些像我一样想知道如何对待遗留应用程序的人,我就这个主题做了一些测试和计算。

多亏了@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)。这倾向于证实上面的理论,即缩放在宽度和高度上不是成比例的,而是使用像素/点的比率。

我希望这能有所帮助。