关于iphone:有没有一种安全的方法可以在通用应用中找到显示尺寸(以像素为单位)?

Is there a safe way to find the display size in pixels in universal app?

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

我第一次使用

[uiscreen主屏幕]边界]

但它没有返回iPhone4的正确大小(至少在模拟器中没有),它只是返回320x480所有iPhone

然后我改为

cgsize screensize=mainscr.currentmode.size;

它在所有苹果设备的模拟器中都能工作,但是当在iPhone3GS设备上运行这一行时,程序会以sigabrt退出。

设备正在运行3.1.2

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


UIScreen.currentMode在<3.2中不可用,因此需要与-respondsToSelector:核对。

1
2
3
4
5
CGSize screenSize;
if ([mainscr respondsToSelector:@selector(currentMode)])
  screenSize = mainscr.currentMode.size;
else
  screenSize = mainscr.bounds.size;

同样,UIScreen.scale在<4.0中不可用,如果使用,请与-respondsToSelector:核对。.

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


[[uiscreen mainscreen]bounds]返回以点为单位的值,而不是以像素为单位,但可以使用scale参数转换像素分辨率。


正确的考虑方法是屏幕分辨率为320x480,但显示比例为2.0。意识到未来"其他"苹果设备很可能会有其他显示比例。想象一下,有一天,一款新的iPad的规模是1.5…

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

他们这样做的原因是为了让在任何设备上编写工作的应用程序变得容易。你可以在100100把一个物体放在屏幕上,它将在两个设备上的同一位置。使用@2X命名方法提供两组图像,一组为1X比例,另一组为2X比例。