iPhoneのモデルを解像度から取得する方法があるらしい
この方法、非常に素晴らしいんですが、残念なことに今は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より大きいので、このコードでも問題ないでしょう。