Dev*_*hen 32 ios uiscreen ios8
在此问题中发布的示例日志中,结果完全相同.有谁知道这两者之间是否存在逻辑差异?
即使是Apple的描述也令人困惑.以下是对的描述scale:
与屏幕关联的自然比例因子...此值反映了从默认逻辑坐标空间转换为此屏幕的设备坐标空间所需的比例因子...
以下是他们的描述nativeScale:
物理屏幕的本机比例因子
自然与本土有什么区别?
Noa*_*oon 22
这些nativeBounds和nativeScale属性主要用于OpenGL,用于表示实际的像素大小和用于精确绘制屏幕分辨率的点到像素比例因子,从而避免了绘制时的额外渲染成本.虚拟1242×2208大小.例如,使用CAEAGLLayer,您可以这样做:
theGLLayer.contentsScale = [UIScreen mainScreen].nativeScale;
Run Code Online (Sandbox Code Playgroud)
...然后只需要以nativeBounds1080×1920 的大小呈现其内容.
该问题中的样本日志来自模拟器,模拟器始终不能保证与实际设备的行为相同.
Vad*_*ick 20
scale和nativeScale都会告诉您一个点对应的像素数.但请记住,点会被渲染到像素的中间缓冲区,然后调整大小以匹配屏幕分辨率.所以,当我们问,"1 pt对应多少像素?" 它可能意味着中间像素(比例)或最终像素(nativeScale).
在iPhone Plus上,比例为3,但nativeScale为2.6.这是因为内容以3x(1点= 3像素)渲染,但随后缩小得到的位图,导致1点= 2.6像素.
因此,scale会处理中间位图,而nativeScale会处理最终的位图.
这是没有显示缩放.如果启用显示缩放,则缩放保持不变,为3,因为中间缓冲区仍然以1点= 3像素渲染.但原生规模变为2.8.
因此,如果要检查物理屏幕,请使用比例.例如,如果您的应用程序仅在iPhone Plus上运行,则可以执行以下操作:
if scale != 3 {
print("Not supported")
}
Run Code Online (Sandbox Code Playgroud)
不:
if nativeScale != 2.6 {
print("Not supported")
}
Run Code Online (Sandbox Code Playgroud)
当用户启用显示缩放时,第二个代码片段无法执行预期的操作.
| 归档时间: |
|
| 查看次数: |
12948 次 |
| 最近记录: |