苹果网站声称分辨率为1080p:1920 x 1080
但是,Xcode(今天启动8.0 GM)所需的启动屏幕为2208 x 1242。
谁是对的?
苹果网站声称分辨率为1080p:1920 x 1080
但是,Xcode(今天启动8.0 GM)所需的启动屏幕为2208 x 1242。
谁是对的?
Answers:
iPhone 6+在内部使用@ 3x资源以虚拟分辨率2208×1242(具有736x414点)进行渲染,然后对其进行采样以进行显示。与在Retina MacBook上使用缩放分辨率相同—它使它们能够以像素资产的整数倍达到目标,同时在屏幕上仍具有例如12 pt的文本看起来相同的大小。
因此,是的,启动屏幕需要具有该大小。
6、5、5、5、4和4均为每英寸326像素,并使用@ 2x资产坚持所有先前设备的每英寸约160点。
6+是每英寸401像素。因此,假设它大概需要@ 2.46倍的资产。相反,Apple使用@ 3x资产并将完整的输出缩减到其自然大小的约84%。
实际上,苹果公司决定将比例提高到87%,将1080转换为1242。毫无疑问,这是为了找到尽可能接近84%的东西,仍然在两个方向上都产生积分大小-准确地为1242/1080 = 2208/1920。 ,而如果将1080变成1286,则需要以某种方式垂直渲染2282.22像素才能很好地缩放。
[UIScreen mainScreen].bounds.size.height
纵向拍摄时,@ msk 在iPhone 6+模拟器中返回736。这是2208的值除以3的比例。宽度为
答案是较旧的应用程序在2208 x 1242缩放模式下运行。但是,当为新手机构建应用程序时,可用的分辨率为:Super Retina 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。这引起了问题中提到的混乱。要构建使用新手机的全屏尺寸的应用,请添加以下尺寸的LaunchImages:1125 x 2436、1242 x 2208、2208 x 1242和750 x 1334。
适用于iPhone 11 Pro Max的尺寸,具有@ 3倍缩放比例,坐标空间:414 x 896点和1242 x 2688像素,458 ppi,设备物理尺寸为3.06 x 6.22英寸或77.8 x 158.0毫米。6.5英寸Super Retina XDR显示器。
大小为iPhone 11临用@ 3×缩放,坐标空间:375 X 812点和1125 X 2436像素,458 PPI,设备的物理尺寸是在2.81 X 5.67或71.4 X144.0毫米。5.8英寸超级视网膜XDR显示屏。
大小为iPhone 11与@ 2X缩放,坐标空间:414 X 896点和828 X 1792像素,326 PPI,设备的物理尺寸是在2.98 X 5.94或75.7 X150.9毫米。6.1英寸液态视网膜高清显示屏。
iPhoneX🅂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
大小为iPhoneX🅁与@ 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
尺寸为iPhoneX🅂和iPhone X与@ 3倍缩放(苹果名称:超级视网膜高清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
大小为iPhone 6,6S,7和8与@ 3×缩放(苹果名:视网膜HD 5.5),坐标空间:414 X 736点和1242×2208个像素,401个PPI,屏幕的物理尺寸是2.7×4.8或为68× 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 6和iPhone 6S与@ 2X缩放(苹果名:视网膜HD 4.7),坐标空间:375 X 667点和750 X 1334像素,326 PPI,屏幕的物理尺寸是2.3×4.1或58×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,否则应用程序将在“缩放模式”下运行,并且不会显示正确的缩放比例或屏幕尺寸。在缩放模式下,nativeScale
和scale
将不相同。在实际设备上,即使iPhone 6 Plus不在缩放模式下运行,其比例也可以为2.608,但在模拟器上运行时,其比例将显示为3.0。
实际/物理iPhone 6 Plus分辨率为1920x1080,但是在Xcode中,您将界面设置为2208x1242分辨率(736x414点),并且在设备上会自动缩小为1920x1080像素。
iPhone分辨率快速参考:
Device Points Pixels Scale Physical Pixels PPI Ratio Size
iPhone XS Max 896x414 2688x1242 3x 2688x1242 458 19.5:9 6.5"
iPhone XR 896x414 1792x828 2x 1792x828 326 19.5:9 6.1"
iPhone X 812x375 2436x1125 3x 2436x1125 458 19.5:9 5.8"
iPhone 6 Plus 736x414 2208x1242 3x 1920x1080 401 16:9 5.5"
iPhone 6 667x375 1334x750 2x 1334x750 326 16:9 4.7"
iPhone 5 568x320 1136x640 2x 1136x640 326 16:9 4.0"
iPhone 4 480x320 960x640 2x 960x640 326 3:2 3.5"
iPhone 3GS 480x320 480x320 1x 480x320 163 3:2 3.5"
您可能应该停止在iOS 8中使用启动图像,并使用情节提要或nib / xib。
在Xcode中6,打开File
菜单,然后选择New
⟶ File...
⟶ iOS
⟶ User Interface
⟶ Launch Screen
。
然后通过单击打开项目的设置。
在General
标签的区域中App Icons and Launch Images
,将设置为Launch Screen File
刚刚创建的文件(将UILaunchStoryboardName
在中设置info.plist
)。
请注意,目前模拟器只会显示黑屏,因此您需要在真实设备上进行测试。
将启动屏幕xib文件添加到您的项目:
配置项目以使用启动屏幕xib文件而不是资产目录:
在物理设备上,iPhone 6 Plus的主屏幕范围是2208x1242,nativeBounds是1920x1080。涉及硬件缩放以调整为物理显示器的大小。
在模拟器上,iPhone 6 Plus的主屏幕边界和nativeBounds均为2208x1242。
换句话说,视频,OpenGL和其他基于CALayers
像素的事物将处理设备上的真实1920x1080帧缓冲区(在sim 上为2208x1242)。处理点的事物UIKit
将处理2208x1242(x3)边界,并在设备上适当缩放。
模拟器无法访问与在设备上进行缩放的硬件相同的功能,并且在软件中对其进行模拟并没有太大的好处,因为它们产生的结果与硬件不同。因此nativeBounds
,将模拟设备的主屏幕的设置设置为物理设备的主屏幕的边界是有意义的。
iOS 8向UIScreen
(nativeScale
和nativeBounds
)添加了API,以使开发人员可以确定与CADisplay
相对应的分辨率UIScreen
。
对于像我这样想知道如何处理旧版应用程序的人,我对此进行了一些测试和计算。
感谢@ 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)上是不同的。这倾向于证实上述理论,即缩放在宽度和高度上不是成比例的,而是使用像素/点的比率。
我希望这有帮助。
查看此信息图:http : //www.paintcodeapp.com/news/iphone-6-screens-demystified
它解释了旧版iPhone,iPhone 6和iPhone 6 Plus之间的区别。您可以看到以点,渲染像素和物理像素为单位的屏幕尺寸比较。您还将在此处找到问题的答案:
iPhone 6 Plus-带有Retina显示屏高清。缩放因子为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
即使我通常不喜欢约翰·格鲁伯(John Gruber)的《大胆的火球》博客的语气,他的《大iPhone猜想》还是值得一读的。
他猜测,但两种型号的像素和像素分辨率都完全正确,只是他不(也不希望)期望苹果打造更小分辨率的物理显示器并缩小比例(详细信息在@Tommy的回答中)。
这一切的要旨是,应该停止以像素为单位思考,而开始以点为单位思考(这已经有一段时间了,这不是最近的发明)以及UI元素的实际尺寸。简而言之,两种新iPhone机型都在这方面有所改进,因为实际上大多数元素都保持相同的大小,您可以在屏幕上容纳更多它们(对于每个更大的屏幕,您可以容纳更多)。
我只是有些失望,对于更大的型号,他们没有将内部分辨率映射为实际的屏幕分辨率1:1。