iPhone 6 Plus分辨率混乱:Xcode还是Apple的网站?发展

时间:2014-09-10 00:14:44

标签: ios xcode ios-simulator iphone-6 iphone-6-plus

Apple的网站声称分辨率为1080p:1920 x 1080

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

谁是对的?

Xcode

8 个答案:

答案 0 :(得分:308)

iPhone 6+在内部使用 @ 3x 资源以 2208×1242 736x414 点)的虚拟分辨率进行渲染,然后采样那显示下来。与在Retina MacBook上使用缩放分辨率相同 - 它可以让它们达到像素资产的整数倍,同时仍具有12磅文字在屏幕上看起来大小相同。

所以,是的,启动屏幕需要那么大。

数学:

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

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

在实践中,Apple决定更多地使用87%,将1080转为1242.毫无疑问,这是为了找到尽可能接近84%的东西,仍然可以在两个方向上产生整体尺寸 - 1242/1080 = 2208 / 1920确切地说,如果你把1080转换成1286,那么你需要垂直渲染2286.22像素才能很好地扩展。

答案 1 :(得分:113)

答案是较旧的应用程序以2208 x 1242 Zoomed模式运行。但是,当为新手机构建应用程序时,可用的分辨率为:超级视网膜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 即可。这引起了问题中提到的混淆。要构建使用新手机全屏尺寸的应用,请添加尺寸为1125 x 2436,1242 x 2208,2208 x 1242和750 x 1334的LaunchImages。

针对新款iPhone X,X和X Max

进行了更新

iPhone X Max 的尺寸 @ 3x 缩放(Apple名称: 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 缩放(Apple名称: Super Retina HD 6.1“显示),坐标空间: 414 x 896 点和 828 x 1792 像素,326 ppi,设备物理尺寸为2.98 x 5.94 in或75.7 x 150.9 mm。

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“显示),坐标空间: 375 x 812 点和 1125 x 2436 像素,458 ppi,设备物理尺寸为2.79 x 5.65 in或70.9 x 143.6 mm。

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

Comparing iPhone 6 and 6 Plus

答案 2 :(得分:96)

真实/物理iPhone 6 Plus分辨率为1920x1080,但在Xcode中,您的界面为2208x1242分辨率(736x414点),在设备上,它会自动缩小到1920x1080像素。

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 resolutions

答案 3 :(得分:46)

您可能应该停止在iOS 8中使用启动图像并使用storyboard或nib / xib。

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

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

  • General标签的App Icons and Launch Images部分,将Launch Screen File设置为您刚创建的文件(这将在{{UILaunchStoryboardName中设置info.plist 1}})。

请注意,目前模拟器只会显示黑屏,因此您需要在真实设备上进行测试

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

Adding a new Launch Screen xib file

将项目配置为使用Launch Screen xib文件而不是资产目录:

Configure project to use Launch Screen xob

答案 4 :(得分:24)

在物理设备上,iPhone 6 Plus的主屏幕界限为 2208x1242 ,nativeBounds为 1920x1080 。需要硬件缩放才能调整大小以适应物理显示。

在模拟器上,iPhone 6 Plus的主屏幕界限和nativeBounds均为2208x1242。

换句话说......基于CALayers处理像素的视频,OpenGL和其他内容将处理真正的 1920x1080 帧缓冲区设备(或SIM上的 2208x1242 )。处理UIKit中的点的事情将处理 2208x1242 (x3)边界,并在设备上进行适当缩放。

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

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

答案 5 :(得分:13)

对于那些想知道如何处理遗留应用程序的人,我对这个主题进行了一些测试和计算。

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

测试是使用带有白色边框的简单黑色背景bg@2x.png进行的。背景的大小为640x1136像素,黑色,内部白色边框为1像素。

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

在iPhone 6屏幕截图中,我们可以看到白色边框顶部和底部有1个像素边距,iPhone 6加上屏幕截图有2个像素边距。这为我们在iPhone 6 plus上提供了使用空间1242x2204,而不是iPhone 6上的1242x2208和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)。这往往证实了上述理论,即缩放在宽度和高度上不成比例,但使用像素/点比率。

我希望这会有所帮助。

答案 6 :(得分:12)

查看此信息图:http://www.paintcodeapp.com/news/iphone-6-screens-demystified

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

  

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

答案 7 :(得分:4)

即使我不喜欢John Gruber的Daring Fireball博客的语气,他的Larger iPhone Display Conjecture也值得一读。

他猜测但两个模型的分辨率和点数都是完全正确,除了他没有(我也没有)期望Apple建立一个更小的分辨率物理显示器并缩小(详情请见@ Tommy的答案。

这一切的要点是,人们应该停止以像素为单位进行思考,并开始根据点数进行思考(这种情况已经存在很长时间了,它不是最近的发明)以及由此产生的物理尺寸的UI元素。简而言之,这两款新款iPhone都在这方面有所改进,因为大多数元素保持相同的尺寸,你可以在屏幕上放置更多的元素(对于每个更大的屏幕,你可以更适合)。

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