iPhone
iOS
Swift

使用しているiPhoneのモデルを推定する

More than 3 years have passed since last update.


iPhoneのモデルを解像度から取得する方法があるらしい

iPhone5かどうかを、画面サイズで判別する方法

この方法、非常に素晴らしいんですが、残念なことに今はSwiftを使ってる。この方法は使えない・・・

モデル判定のためだけに、Objective-Cを使う。そんなわけにもいかないのでSwiftで書き直せないかやってみました。


Swiftで書いてみた


Swift

    /**

使用しているiPhoneのモデルを推定する

:returns: 解像度から推定される使用デバイス
*/
func iOSDevice() -> String {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
if 1.0 < UIScreen.mainScreen().scale {
let size = UIScreen.mainScreen().bounds.size
let scale = UIScreen.mainScreen().scale
let result = CGSizeMake(size.width * scale, size.height * scale)
switch result.height {
case 960:
return "iPhone4/4S"
case 1136:
return "iPhone5/5s/5c"
case 1334:
return "iPhone6"
case 2208:
return "iPhone6 Plus"
default:
return "unknown"
}
} else {
return "iPhone3"
}
} else {
if 1.0 < UIScreen.mainScreen().scale {
return "iPad Retina"
} else {
return "iPad"
}
}
}


本家ではscaleが呼べるかどうかで判定していたようなのですが、どうもSwiftではそれに該当する機能が見つからない・・・そもそもscaleが普通にプロパティとして常時存在しているような?

そこで、scaleの本来の意味に戻って、scaleが1以上=retinaだ!という感じで解釈してコードを分岐させています。ドキュメントによればretinaなら2、そうじゃないなら1らしい。

公式:UIScreen Class Reference - Apple Developer

ちなみに、iPhone6 Plusなら3とかじゃないの?とも思ったけど持ってないので検証してない。どのみち1より大きいので、このコードでも問題ないでしょう。