ipad Retina屏适配问题
在游戏适配过程中,会遇到 iPad 中 Retina 屏的适配问题,可通过添加以下代码来解决。
启用 Retina 显示的代码
if (getDeviceID() == IPAD_RETINA || getDeviceID() == IPHONE_RETINA) {
pDirector->enableRetinaDisplay(true);
}
上述代码通过调用 getDeviceID() 函数获取设备 ID,当设备为 iPad Retina 或 iPhone Retina 时,调用 pDirector->enableRetinaDisplay(true) 方法来启用 Retina 显示。
获取设备 ID 的代码
int getDeviceID() {
int iphone = 1;
int retina = 1;
// Determine device kind
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// iPad
iphone = 0;
} else {
// iPhone
iphone = 1;
}
// Determine retina display
if ([UIScreen instancesRespondToSelector:@selector(scale)] && UIScreen.mainScreen.scale > 1.0) {
// Retina
retina = 1;
} else {
// Non - retina
retina = 0;
}
if (iphone) {
if (retina) return IPHONE_RETINA;
return IPHONE_LOW;
} else {
if (retina) return IPAD_RETINA;
return IPAD_LOW;
}
}
getDeviceID() 函数的作用是判断当前设备的类型(iPad 或 iPhone)以及是否为 Retina 显示屏,并根据判断结果返回相应的设备 ID。具体步骤如下:
- 初始化变量:定义两个整型变量
iphone和retina并初始化为 1。 - 判断设备类型:使用
UI_USER_INTERFACE_IDIOM()函数判断当前设备是 iPad 还是 iPhone。如果是 iPad,将iphone变量置为 0;如果是 iPhone,将iphone变量置为 1。 - 判断是否为 Retina 显示屏:通过检查
UIScreen是否响应scale选择器,并且UIScreen.mainScreen.scale是否大于 1.0 来判断当前设备是否为 Retina 显示屏。如果是 Retina 屏,将retina变量置为 1;否则置为 0。 - 返回设备 ID:根据
iphone和retina的值返回相应的设备 ID。如果是 iPhone 且为 Retina 屏,返回IPHONE_RETINA;如果是 iPhone 但不是 Retina 屏,返回IPHONE_LOW;如果是 iPad 且为 Retina 屏,返回IPAD_RETINA;如果是 iPad 但不是 Retina 屏,返回IPAD_LOW。