【Xcode】アプリ画面の向きを固定する方法!デバイスの回転と縦横識別

この記事からわかること

  • Xcodeアプリ画面向き固定する方法
  • デバイス回転制御する
  • PortraitLandscapeとは?
  • デバイスの向き(//上向き)を取得するには?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

iOSアプリをリリースした際にデバイスを横にした時に画面が崩れてしまったので、画面を回転させてもアプリ画面の向きが変化しないように設定していきたいと思います。

【Xcode】アプリ画面の向きを固定する方法!デバイスの回転と縦横識別

環境

アプリ画面の向きを固定する方法

Xcodeでアプリの画面の向きを固定するには「TARGETS」>「Deployment Info」>「Device Orientation(デバイスの向き)」から設定可能です。「Device Orientation(デバイスの向き)」ではアプリに許容させたい向きを指定する設定項目なのでアプリ画面の向きを縦向きのみに固定するにはPortraitのみにチェックを入れます。

【Xcode】アプリ画面の向きを固定する方法!デバイスの回転と縦横識別

許容する向きの設定値

※Upside Down:逆さまに関してはチェックを入れてもアプリ画面が逆さまにはなりませんでした。(2023年6月現在)

英語の意味

iPadでのデバイスの回転

「Device Orientation(デバイスの向き)」は「iPhone Orientation」と「iPad Orientation」に分かれているのでiPadにも画面の向きを適応させたい場合は「iPad Orientation」側のチェックを設定します。

※Upside Down:iPad側では正常に動作しました。(2023年6月現在)

info.plistから設定する

Xcodeの「info.plist」からでもアプリ画面の向きを設定することが可能です。「info.plist」に設定するためのキー「Supported interface orientations (iPhone)」を指定し、値(value)には先ほどと似たような設定値を渡します。

【Xcode】アプリ画面の向きを固定する方法!デバイスの回転と縦横識別

許容する向きの設定値

先ほどの「Device Orientation」と「Supported interface orientations (iPhone)」はリンクしているようなのでどちらかの設定をいじるともう片方も自動で修正されます。(info.plist側は削除される)

現在の画面の向きを取得する

デバイス現在の向きをコードで取得するにはUIDeviceクラスのorientationプロパティを参照します。

UIDevice.current.orientation

取得できるのはUIDeviceOrientation型で値はデバイスが水平で画面が上向きのfaceUpや不明(unknown)などを追加した7種類定義されています。

func printOrientation(){
    
    let orientation:UIDeviceOrientation = UIDevice.current.orientation
    switch orientation{
        case .unknown:
            print("デバイスの向きが不明")
        case .portrait:
            print("デバイスの向きが縦向き")
        case .portraitUpsideDown:
            print("デバイスの向きが逆さま")
        case .landscapeLeft:
            print("デバイスの向きが左向き")
        case .landscapeRight:
            print("デバイスの向きが右向き")
        case .faceUp:
            print("デバイスが水平で画面が上向き")
        case .faceDown:
            print("デバイスが水平で画面が下向き")
        default:
            break
            
    }
}

デバイスの向き変更を検知/取得する方法

デバイスの回転を検知するためにはNotificationCenterクラスを使用します。

func observerOrientation(){
    UIDevice.current.beginGeneratingDeviceOrientationNotifications()
    NotificationCenter.default.addObserver(
        forName: UIDevice.orientationDidChangeNotification,
        object: nil,
        queue: nil) { orientation in
            print("デバイスの向きが変わったよ")
        }
}

func stopObserver(){
    UIDevice.current.endGeneratingDeviceOrientationNotifications()
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index