UIDeviceクラスを使った判定
コードでiPhoneかiPadかを判別する時は、UIDevice
クラスを使って次のようにします。
以下はマクロを定義しています。
#define IS_PAD ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
#define IS_PHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
このマクロは以下のように使えます。
...
if (IS_PAD) {
NSLog(@"iPadです");
} else {
NSLog(@"iPadではありません");
}
...
注意したいのは、この判定が意味を成すのは、ユニバーサルアプリの時のみです。
iPhoneにしか対応していないアプリをiPadで起動した場合、IS_PAD
はNO
となります。
追記) [[UIDevice currentDevice] model]
を参照することで、ユニバーサルアプリかどうかに関わらず、判定できます(下記コメント欄参照)。
UIScreenクラスを使った判定
追記) 画面サイズで判定した場合はどうなるか、検証してみました。
以下のマクロを定義します。
#define IS_IPAD (MIN([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) == 768)
#define IS_IPAD_12_9 (MIN([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) == 1024)
2016/8/17時点で、発売されているiPad,Mini,Air,Proは768x1024または1024x1366の2パターンのみのようです。
参考: iPhone/iPad解像度(画面サイズ)早見表
以下のようにiPadかを判別します。
...
if (IS_IPAD || IS_IPAD_12_9) {
NSLog(@"iPadです");
} else {
NSLog(@"iPadではありません");
}
...
この判定方法でも、意味を成すのは、ユニバーサルアプリの時のみでした。
つまり、iPhoneにしか対応していないアプリをiPadで起動した場合、IS_IPAD
およびIS_IPAD_12_9
はNO
となります。
#[UIScreen mainScreen].bounds
が変わっちゃ他のところで影響出そうだものね