2015-09-02 2 views
3

Я попробовал следующее:Как программно поворачивать ориентацию в Swift?

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

на

viewWillAppear 

, но он не работает. Как я могу повернуть экран в viewWillAppear?

ОБНОВЛЕНИЕ

Я использую следующий код для блокировки ориентации:

var shouldRotate = true 
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int { 
    if shouldRotate == true { 
     return Int(UIInterfaceOrientationMask.Portrait.rawValue) 
    } else { 
     return Int(UIInterfaceOrientationMask.LandscapeLeft.rawValue) 
    } 
} 

и в моем первом контроллере в viewWillAppear я поставил:

if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate { 
    appDelegate.shouldRotate = true 
} 

в моем втором контроллере:

if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate { 
    appDelegate.shouldRotate = false 
} 

так, когда я вернулся из второго контроллера к первому:

я повернуть его влево - не вращается, вращение назад направо - ничего, повернуть налево, снова - она ​​вращается.

Как это исправить?

ответ

1

Вы можете переопределить UIViewController.supportedInterfaceOrientations() вместо запуска вращения в viewWillAppear

Для Xcode 7

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.Landscape 
} 

Для Xcode 6

override func supportedInterfaceOrientations() -> Int { 
    return Int(UIInterfaceOrientationMask.Landscape.rawValue) 
} 

И убедитесь, что требуемые ориентации включены в настройках проекта.

enter image description here

+0

это дает мне следующую ошибку: 'Переопределение метода с селекторных«supportedInterfaceOrientations»имеет несовместимый тип«() -> UIInterfaceOrientationMask'' –

+0

Это синтаксис Xcode 7 в, пардон – Quanlong

+0

'UIInterfaceOrientationMask' не конвертируется в Int ошибки –

7

Для изменения ориентации в быстром программно 3, используйте следующий способ:

let value = UIInterfaceOrientation.landscapeRight.rawValue 
UIDevice.current.setValue(value, forKey: "orientation") 

Вы можете использовать ориентации,

1. Портрет 2. portraitUpsideDown 3. landscapeLeft 4. landscapeRight

Смежные вопросы