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

Jas*_*enX 265 xcode ios ios-simulator iphone-6 iphone-6-plus

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

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

谁是对的?

Xcode中

Tom*_*mmy 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%.

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

  • 你是怎么算出来的 - >"虚拟分辨率2208×1242(含736x414点)"这个"需要大约@ 2.46x资产"UIScreen主屏幕的内容是什么.bounds.size.height将返回6+?568,568*3(1704)或1920. (6认同)
  • 多么可怕的kludge!系统范围内的性能,内存和锐度损失只是为了使一些API级别的大小调整稍微简单一些!嗯,我想当他们发布带有5.5"461 ppi显示屏的iPhone 7 Plus时,一切都会有意义. (4认同)
  • @msk` [UIScreen mainScreen] .bounds.size.height`在纵向时在iPhone 6+模拟器中返回736.这是2208值除以3的比例.宽度为414. (2认同)

Han*_*son 114

答案是较旧的应用程序以2208 x 1242 Zoomed模式运行.但是,当为新手机构建应用程序时,可用的分辨率为:Super Retina HD 5.8(iPhone X)1125 x 2436(458ppi),Retina HD 5.5(iPhone 6,7,8 Plus)1242 x 2208Retina 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最大值@ 3×缩放(苹果名:超级视网膜HD 6.5显示"),坐标空间:414 X 896点和1242 X 2688个像素,458 PPI,设备的物理尺寸是在3.05 X 6.20或77.4 X157.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
Run Code Online (Sandbox Code Playgroud)

大小为iPhone X@ 2X缩放(苹果名:超级视网膜HD 6.1"显示器),坐标空间:414 X 896点和828 X 1792像素,326 PPI,设备的物理尺寸是在2.98 X 5.94或75.7 X150.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
Run Code Online (Sandbox Code Playgroud)

尺寸为iPhone XiPhone X,缩放比例为3倍(Apple名称: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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

尺寸为iPhone 6,6S,7和8,缩放比例为3倍(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
Run Code Online (Sandbox Code Playgroud)

iPhone 6iPhone 6S尺寸为@ 2x缩放(Apple名称:Retina HD 4.7),坐标空间:375 x 667点和750 x 1334像素,326 ppi,屏幕物理尺寸为2.3 x 4.1英寸或58 x 104毫米.在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
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

注意:上传LaunchImages,否则应用程序将在Zoomed模式下运行,并且不会显示正确的缩放比例或屏幕大小.在Zoomed模式中,nativeScale并且scale不会是相同的.在实际设备上,iPhone 6 Plus上的刻度可以是2.608,即使它没有在Zoomed模式下运行,但在模拟器上运行时它会显示3.0的比例.

比较iPhone 6和6 Plus

  • 我猜你没有添加新的发布图像版本.这可能就是为什么应用程序以"兼容模式"运行,屏幕边界是两台设备上的旧版320x576. (3认同)
  • 只要添加新的启动图像大小,就会获得正确的(逻辑)屏幕边界大小:iPhone 6为375x667,6 +为4x4147. (3认同)

Les*_*ary 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"
Run Code Online (Sandbox Code Playgroud)

iPhone分辨率

  • 美丽而简单的回复.谢谢Leszek. (3认同)

dav*_*sdk 46

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

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

  • 然后单击打开项目的设置.

  • General选项卡的"调用"部分中App Icons and Launch Images,设置Launch Screen File刚刚创建的文件(这将设置UILaunchStoryboardNameinfo.plist).

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

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

添加新的Launch Screen xib文件

配置项目以使用Launch Screen xib文件而不是Asset Catalog:

配置项目以使用Launch Screen xob


Jer*_*oia 24

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

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

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

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

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


Fra*_*rry 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
Run Code Online (Sandbox Code Playgroud)

其次,重要的是要知道@ 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
Run Code Online (Sandbox Code Playgroud)

重要的是要注意iPhone 6的缩放在宽度和高度上不一样的(309x310).这倾向于证实上述理论,即缩放在宽度和高度上不成比例,但使用像素/点比率.

我希望这有帮助.


Dar*_*ski 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