苹果设备中的分辨率问题

在苹果设备的应用开发过程中,我们经常会需要处理屏幕的分辨率问题,包括普通屏幕和Retain屏幕。

处理屏幕分辨率时,分为点(point)分辨率和像素(pixel)分辨率。当我们查看设备参数时,看到的一般会是像素分辨率,因为它的数值更大,看起来更高大上。接下来,我们以iPhone设备为例,来看一看如何在开发中分别处理点分辨率和像素分辨率。

首先,在Xcode中创建一个iOS下的单视图应用(Single View Application),然后,在ViewController.m文件中的viewDidLoad方法中创建相关的代码。

下面的代码,会显示当前设备的点分辨率。

Objective-C
CGSize size = [[UIScreen mainScreen] bounds].size;
NSLog(@"Points: width(%f), height(%f)",
     size.width, size.height);

如果测试的设备使用了Retain屏幕,那么,以上代码显示数据的会远低于标识的分辨率参数,而下面的代码则会显示完整的像素分辨率。

Objective-C
CGSize size = [[UIScreen mainScreen] bounds].size;
float scale = [UIScreen mainScreen].scale;
NSLog(@"Pixels: width(%f), height(%f)",
     size.width * scale, size.height * scale);

在第二段代码中,我们使用了屏幕的scale属性,其值就是点与像素的关系。如果scale值为1,则说明设备没有使用Retain屏幕;如果大于1,则说明设备使用了Retain屏幕;如果scale属性值为3,则表示屏幕上的一个点(point)包含9个(3*3)像素(pixel)。

一般来讲,在iOS或macOS系统的界面开发中只使用点坐标就可以了,这样可以简化不少的坐标处理工作。需要注意的是,UIKit界面的原点(0,0)位于左上角,而SpriteKit中界面原点则位于左下角。