

アプリ起動時にViewControllerを強制的に縦画面で表示したいのですが、

[code]

    func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
        return .Portrait
    }
    
[/code]

が呼ばれません。

SingleViewアプリケーションで以下のようにサンプルを作ってもよばれません。

[code]

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
            return .Portrait
        }
    
    
        override func shouldAutorotate() -> Bool {
            return true
        }
    
        override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
            return .All
        }
    
    }
    
[/code]

呼ばれるようにするにはどうすればいいのでしょうか？


CC BY-SA 3.0
2016-02-02T12:32:02.780
21632
2016-02-03T10:55:00.210
12297
question
swift
アプリ起動時「func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation」が呼ばれません。


それぞれの関数に `print(__FUNCTION__)` でも挿入していただければわかると思いますが、どの関数も正常に呼ばれています。  
（Xcode 7.2 / シミュレーター環境で確認）

アプリを強制的に縦画面で表示する方法ですが、コードから実現する場合、以下のコードだけで実現できるかと思われます。

[code]

    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
            return .Portrait
        }
    }
    
[/code]

もっと単純に、[Targets] - [Deployment Info]からDevice Orientationを指定する方法もあります。

[![デバイスの向きを指定](https://i.stack.imgur.com/7vGXH.png)](https://i.stack.imgur.com/7vGXH.png)


CC BY-SA 3.0
2016-02-03T09:29:36.403
21661
2016-02-03T09:29:36.403
7459
21632
answer

[code]

     class AppDelegate: UIResponder, UIApplicationDelegate {
    
            //...
    
                func application(application: UIApplication,
                        supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
                            if allowsLandscape == false {
                                return .Portrait
                            } else {
                                return .All
                            }
                }
    }
    
[/code]

viewControllerから特定のタイミングで、`allowsLandscape`フラグを変更することで、できました。


CC BY-SA 3.0
2016-02-03T10:55:00.210
21665
2016-02-03T10:55:00.210
12297
21632
answer