2016-12-20 6 views
3

Привет ребята Я использую этот код stackoverflowSwift 3 - авторотации Force

Например, у меня есть вид 1 (только портрет) и вид 2 (портрет + пейзаж). Когда вы видите 1 и нажмите кнопку, вы откроете View 2 со всплывающим окном на весь экран, и когда вы закроете вид 2 и увидите, что вид 1 станет видимым, я хочу автоматически перевернуть его в портретный режим, если вид 2 был в пейзаже. Какие-либо предложения ?

+0

Ответ уже существует: [Как заблокировать конкретный контроллер с определенной ориентацией просмотра] (http://stackoverflow.com/questions/28938660/how-to-lock-orientation-of-one-view-controller-to-portrait-mode-only-in-swift/28955624 # 28955624) –

+0

переход на быстрый 3 не составляет труда. –

ответ

6

Как вы уже сказали, вы используете всплывающее окно, я уверен, что вы используете navigationController. вот иерархия представлений.

Существует три видаКонтроллеры, соответствующие этим xib.

Только для контроллера ViewController установлено значение portrait, а для второго контрольного устройства установлено значение portrait and landScapeLeft (вы можете изменить его на все, что вам нужно). Он работает отлично, как вам нужно. Когда второй находится в пейзаже, поп в первый, он будет вынужден установить портрет.

NavViewController

ViewController

SecondViewController

views hierarchy

//NavViewController.swift

class NavViewController: UINavigationController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override var shouldAutorotate: Bool { 
     return (visibleViewController?.shouldAutorotate)! 
    } 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return (visibleViewController?.supportedInterfaceOrientations)! 
    } 
} 

//ViewController.swift

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
    override var shouldAutorotate: Bool { 
     return false 
    } 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return .portrait 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     let value = UIInterfaceOrientation.portrait.rawValue 
     UIDevice.current.setValue(value, forKey: "orientation") 
     UIViewController.attemptRotationToDeviceOrientation() 
    } 
} 

SecondViewController.swift класс SecondViewController: UIViewController {

override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
    override var shouldAutorotate: Bool { 
     return true 
    } 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return [.portrait, .landscapeLeft] 
    } 
} 
+0

мне нужно было только 'пусть значение = UIInterfaceOrientation.portrait.rawValue UIDevice.current.setValue (значение, forKey: "ориентация") UIViewController.attemptRotationToDeviceOrientation()' спасибо :) –

+0

не весь код, но одна линия для работы мне спасибо –

+0

Богдан Богданов тоже: p –