是否有一种安全的方法可以在通用应用中找到以像素为单位的显示尺寸?

时间:2010-07-07 08:13:02

标签: iphone ipad

在我的通用iPhone / iPad应用程序中尝试获取屏幕尺寸时,我遇到了一些奇怪的问题。

我第一次使用

[[UIScreen mainScreen] bounds]

但它没有为iPhone 4返回正确的尺寸(至少不在模拟器中),它只返回所有iPhone的320x480

然后我改为

CGSize screenSize = mainscr.currentMode.size;

它适用于所有苹果设备的模拟器,但是当在iPhone 3GS设备上运行此行时,程序会以SIGABRT退出

设备正在运行3.1.2

知道如何以设备安全的方式获取显示器的像素尺寸吗?

3 个答案:

答案 0 :(得分:3)

[[UIScreen mainScreen] bounds]返回 points 中不是像素的值,但您可以使用scale参数转换分辨率(以像素为单位)。

答案 1 :(得分:3)

UIScreen.currentMode在<中不可用3.2,所以你需要查看-respondsToSelector:

CGSize screenSize;
if ([mainscr respondsToSelector:@selector(currentMode)])
  screenSize = mainscr.currentMode.size;
else
  screenSize = mainscr.bounds.size;

同样地,UIScreen.scale在<中不可用。 4.0,如果您使用它,请查看-respondsToSelector:

CGFloat scale = [mainscr respondsToSelector:@selector(scale)] ? mainscr.scale : 1.0f;

答案 2 :(得分:0)

正确的思考方式是屏幕分辨率为IS 320x480但显示比例为2.0。意识到未来“其他”苹果设备很可能会有其他的显示尺度。想象一下有一天新的iPad有1.5的规模...

  if([[UIScreen mainScreen] respondsToSelector:@selector"scale"]) {
      displayScale = [[UIScreen mainScreen] scale]; }

他们这样做的原因是为了轻松编写适用于任何设备的应用程序。您可以将对象放在屏幕上100,100,它将位于两个设备上的相同位置。使用@ 2x命名方法提供两组图像,一组为1x比例,另一组为2x比例。