2014-05-05 2 views

ответ

5

Sure:

+0

Обратите внимание, что это будет работать только в том случае, если 'ViewController' не встроен в' NavigationController', его нужно называть модально, так как 'NavigationController' отвечает за авторотацию, и вы не можете его изменить только один 'ViewController' –

+0

@B: Я использую этот метод в своем viewController, который не находится в UINavigationController. @FreeNickname: Эти методы необходимо вставить в свой rootViewController. –

+0

@MatteoGobbi, да, извините. Я удалил свой комментарий, чтобы избежать двусмысленности. – FreeNickname

0

Если у вас есть несколько ViewControllers в NavigationController, и вы хотите, чтобы отключить вращение в одной из них только, вам нужно установить и вращение управления в ApplicationDelegate. Вот как сделать это в Swift ...

В AppDelegate.swift:

class AppDelegate: UIResponder, UIApplicationDelegate { 


var blockRotation: Bool = false 

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int { 

    if (self.blockRotation) { 
     println("supportedInterfaceOrientations - PORTRAIT") 
     return Int(UIInterfaceOrientationMask.Portrait.rawValue) 
    } else { 
     println("supportedInterfaceOrientations - ALL") 
     return Int(UIInterfaceOrientationMask.All.rawValue) 
    } 
} 

В ViewController, что вы хотите, чтобы заблокировать вращение, добавить UIApplicationDelegate к классу ...

class LoginViewController: UIViewController, UITextFieldDelegate, UIApplicationDelegate { 

, а затем создать ссылку на AppDelegate ...

var appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 

В viewDidLoad, установить appDelegate.blockRotation = верно:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    appDelegate.blockRotation = true 

} 

В viewWillAppear, установить ориентацию, чтобы заставить устройство к выбранной ориентации (портрет в этом примере):

override func viewWillAppear(animated: Bool) { 

    let value = UIInterfaceOrientation.Portrait.rawValue 
    UIDevice.currentDevice().setValue(value, forKey: "orientation") 

} 

Затем в viewWillDisappear, или в prepareForSegue, установить appDelegate.blockRotation = ложь:

override func viewWillDisappear(animated: Bool) { 
    appDelegate.blockRotation = false 
} 

Это будет блокировать вращение в контроллере один вид навигации в пределах Contro ller, который содержит несколько ViewControllers. Надеюсь это поможет.