LoginSignup
9
6

More than 5 years have passed since last update.

iPhoneかiPadかを判別するときの注意点

Last updated at Posted at 2016-08-16

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_PADNOとなります。

追記) [[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_9NOとなります。

#[UIScreen mainScreen].boundsが変わっちゃ他のところで影響出そうだものね

9
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6