LoginSignup
27
28

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-12-07

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より大きいので、このコードでも問題ないでしょう。

27
28
5

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
27
28