iPhoneのRetina4ディスプレイ判定方法
Retina4か否かを判定する方法をいろいろ調べてみました。
正しいディスプレイのサイズを取得するためには、+[UIScreen mainScreen]メソッドで得られるオブジェクト使うのですが、以下のように3つの値が取得できます。
NSLog(@"mainScreen bounds height %f", [[UIScreen mainScreen] bounds].size.height); NSLog(@"mainScreen applicationFrame height %f", [[UIScreen mainScreen] applicationFrame].size.height); NSLog(@"mainScreen currentMode height %f", [[UIScreen mainScreen] currentMode].size.height);
それぞれの結果を見てみると、以下の通りになりました。
- mainScreen bounds height 568.000000
Retina以前のディスプレイと、互換のあるサイズ表記 - mainScreen applicationFrame height 528.000000
1と同様だけど、ステータスバーを含まない高さであり、ステータスバーの状態によって値が変わる。この例は、着信ステータスバーがONになっている状態なので、1より40px少ない値になっている。 - mainScreen currentMode height 1136.000000
物理的なpixel値。解像度の判定まで必要な場合は、この値を使うのが適切かもしれない。
SysStats Monitor/Liteでは、現在2を使っているので、ステータスバーの状態によって取得される値が変わってしまい、着信中やテザリング中にアプリが起動されると、正しく判定できていないことがわかりました。
今回の目的では1と3のどちらでもいいと思いますが、とりあえず1を採用し、以下の形でチェックすることにしました。
#define R4_DISPLAY_HEIGHT 568.0 + (BOOL)is4InRetinaDisplay { if ([[UIScreen mainScreen] bounds].size.height == R4_DISPLAY_HEIGHT) { return YES; } else { return NO; } }