ホーム

supportedInterfaceOrientationsForが呼ばれない -Swift4

やりたいこと

アプリを初期起動した時、ipadだったらデバイスの向きをlandscapeLeftlandscapeRight限定の設定(ipadの向きを横画面のみ)にしてiPhoneならばportraitで縦画面のみ(iPhoneの向きを縦画面のみ)にしたいと思いました。

こんな感じに

if(デバイスがiPhoneなら){

   縦画面で固定

}else if(デバイスがiPad){

   横画面で固定

}

iPadの時だけ動かない

下記のように実装すれば、iPhoneの時は問題なく、動くのに、iPadの時は全然動きませんでした

    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {

        var whatwhatDevice :  UIInterfaceOrientationMask = [.portrait]

        switch UIDevice.current.userInterfaceIdiom {

            case .phone:
                print("phone")
                 whatwhatDevice = [.portrait]
                  break

            case .pad:
                print("pad")
                 whatwhatDevice = [.landscapeLeft, .landscapeRight]]
                  break

        case .unspecified: break
        case .tv: break
        case .carPlay: break
        }
        return [whatwhatDevice]
    }

原因

原因はこれ。こんな風にinfo.plistに回転情報が書いてあると、xcodeはソースコードなんかよりも、info.plistの情報を優先するので、ipadの回転を制御しようとしても無駄です。

スクリーンショット 2017-12-11 14.15.43.png

完成した実装

info.plistに書かれているSupported interface orientations (iPad)情報を削除して下記のように実装しました。UIDevice.current.userInterfaceIdiomを使うとsupportedInterfaceOrientationsForでデバイスを判定しなかったのでUIDevice.current.modelでiPhoneかiPadかを判定しました

    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {

        var whatwhatDevice :  UIInterfaceOrientationMask = [.landscapeLeft]

        if(UIDevice.current.model == "iPad"){
            whatwhatDevice  = [.landscapeLeft]

            print("pad")
        }

        if(UIDevice.current.model == "iPhone"){
            whatwhatDevice  = [.portrait]

            print("phone")
        }

        return [whatwhatDevice]
    }
Pocket
LinkedIn にシェア

エンジニアにおすすめできる本

Card image cap
リーダブルコード

より良いコードを書くためのシンプルで実践的なテクニック

Card image cap
Webを支える技術

HTTP,URI,HTML,そしてREST

Card image cap
誰でもPythonで作れる

儲かるAIとソフトウェアの作り方

Card image cap
プログラマが知るべき97のこと

現場で使える実践哲学のマスターピース

Card image cap
情熱プログラマー

時代を超えて。ソフトウェア開発者の幸せな生き方

Card image cap
アジャイルサムライ

プログラミング達人開発者への道

Card image cap
Rubyを作った男 まつもとゆきひろ

コードの世界 スーパー・プログラマになる14の思考法

ご提供 sponsor
 

Meee!(ミー)は、ビジネスからプライベート利用まで、個人のスキルを気軽に売り買いできるスキルマーケットです。カテゴリや居住地から、検索することが可能です。

 

ランゲージエクスチェンジは、ネイティブスピーカーと気軽にマッチングできる言語交換プラットフォームです。あなたの地元に住む外国人を探したり、留学や海外移住の前に、現地のネイティブスピーカーと繋がることもできます!

宣伝
 

りょすけトークchは、仕事や私生活をより豊にするYouTubeチャンネルです。文献(本、映画、論文)から役に立つ情報をまとめ、生涯にわたり役に立つ哲学をお届けしています。是非、チャンネル登録してみてね

-ホーム

Copyright© offブログ! , 2021 All Rights Reserved Powered by AFFINGER5.