【发布时间】:2016-06-28 13:01:09
【问题描述】:
我对 iOS 开发还很陌生,我有一个愚蠢的问题。我有一个 64 像素宽度的图片。 iPhone 5 模拟器屏幕宽度为 320 像素,在模拟器上占屏幕宽度的 20%。但我知道真正的 iPhone 屏幕宽度是 640 像素。这是否意味着我的图片将占据屏幕宽度的 10%?
【问题讨论】:
标签: ios iphone ios-simulator
我对 iOS 开发还很陌生,我有一个愚蠢的问题。我有一个 64 像素宽度的图片。 iPhone 5 模拟器屏幕宽度为 320 像素,在模拟器上占屏幕宽度的 20%。但我知道真正的 iPhone 屏幕宽度是 640 像素。这是否意味着我的图片将占据屏幕宽度的 10%?
【问题讨论】:
标签: ios iphone ios-simulator
目标-C:
CGRect screenBounds = [[UIScreen mainScreen] bounds];
斯威夫特:
let screenBounds:CGRect = UIScreen.main.bounds
这将为您提供整个屏幕的分辨率(以点为单位),因此对于较旧 iPhone 来说,它通常是 320x480。即使 iPhone 4 的屏幕尺寸要大得多,iOS 仍然返回 320x480 而不是 640x960。
对于 iPhone 6+/7+,它是 414x736(原生边界:1242*2208)
对于 iPhone 6/7,它是 375x667(原生边界:750x1334)
您可以通过将上述代码中的bounds 更改为nativeBounds 来检查“native bounds”
目标-C:
CGFloat screenScale = [[UIScreen mainScreen] scale];
斯威夫特:
let screenScale:CGFloat = UIScreen.main.scale
这将为您提供屏幕的比例。对于所有没有 Retina 显示屏的设备,这将返回 1.0f,而 Retina Display 设备将返回 2.0f,iPhone 6 Plus (Retina HD) 将返回 3.0f。
现在,如果您想获取 iOS 设备屏幕的像素宽度和高度,您只需要做一件简单的事情。
CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);
乘以屏幕的比例可以得到实际的像素分辨率。
【讨论】:
模拟器上的一切看起来都与设备上的完全一样。否则,模拟器将毫无意义,你不这么认为吗?
在所有 iOS 设备上,您需要区分 points 和 pixels。您以点为单位进行所有计算和所有图形命令。 iPhone 5 有 320 x 568 点。每个点使用 2 x 2 像素显示,以获得更好的图像质量。但是如果你想绘制覆盖整个屏幕的东西,那就是 320 x 568 点,这就是你在软件中使用的。 99.9% 的时间,iOS 会为您处理差异。
【讨论】: