iPhone 6 Plus分辨率困惑:Xcode还是苹果的网站? 为发展
苹果的网站声称,该决议是1080p:1920×1080
然而,Xcode(今天推出的8.0 GM)所需的启动屏幕是2208 x 1242。
谁是对的?
iPhone 6+在虚拟分辨率为2208×1242 ( 736×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.5 ( iPhone 6,7,8加 ) 1242×2208和视网膜高清4.7 iPhone 6 ) 750 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 6和iPhone 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,否则应用程序将在缩放模式下运行,不显示正确的缩放比例或屏幕尺寸。 在缩放模式下, nativeScale
和scale
将不相同。 在实际的设备上,iPhone 6 Plus的缩放比例可以是2.608,即使它没有在缩放模式下运行,但在模拟器上运行时会显示3.0的缩放比例。
真正的/物理的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"
您应该停止在iOS 8中使用启动图像,并使用故事板或nib / xib。
-
在Xcode 6中 ,打开
File
菜单并selectNew
⟶File...
⟶iOS⟶User Interface
⟶Launch Screen
。 -
然后通过点击打开项目的设置 。
-
在“
General
选项卡的“App Icons and Launch Images
,将Launch Screen File
设置为您刚刚创build的文件(这将在info.plist
设置UILaunchStoryboardName
)。
请注意,目前模拟器只会显示黑屏,所以您需要在真实设备上进行testing 。
将启动屏幕xib文件添加到您的项目中:
configuration项目以使用启动屏幕xib文件而不是资产目录:
在物理设备上,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为UIScreen
( nativeScale
和nativeBounds
)添加了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为更大的模型。
- 我应该使用什么值CFBundleVersion和CFBundleShortVersionString?
- iPhone:用导航栏显示模态UITableViewController
- iPhone应用程序图标 – 准确的半径?
- 如何抛出SKSpriteNode?
- 将Objective C框架连接到Swift iOS 8应用程序(Parse框架)
- 将使用相机拍摄的照片捕获并存储到本地数据库/ PhoneGap / Cordova / iOS中
- Swift – 将string转换为Int
- 在Objective-C的主线程中检测代码是否正常运行的正确方法是什么? (iOS)
- 当键盘存在时如何使UITextField向上移动?