Можно ли включить/отключить параметр поворота для текущего экрана, или это свойство предназначено для всех приложений?Отключение вращения для текущего экрана?
ответ
Sure:
Если у вас есть несколько 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. Надеюсь это поможет.
Обратите внимание, что это будет работать только в том случае, если 'ViewController' не встроен в' NavigationController', его нужно называть модально, так как 'NavigationController' отвечает за авторотацию, и вы не можете его изменить только один 'ViewController' –
@B: Я использую этот метод в своем viewController, который не находится в UINavigationController. @FreeNickname: Эти методы необходимо вставить в свой rootViewController. –
@MatteoGobbi, да, извините. Я удалил свой комментарий, чтобы избежать двусмысленности. – FreeNickname