2015-12-28 3 views
2

Я использую приложение iOS в быстром режиме. Я использовал UITabBarController как rootViewController. У меня есть список видео в одном viewController. Этот viewController поддерживает только портретный режим, а пользователь выбирает видео, а затем вводит playerController с помощью метода showViewController, который может поддерживать как ориентацию (портретный, так и альбомный режим). Если видео завершено, то playerController поп в контроллер списка видео. Все в порядке, но пользователь может поворачивать экран во время завершения видео (например, оставшееся время 1 или 0 секунд), а затем просмотр списка видеозаписей. Вход в режим ландшафта. Я пробовал этот код для установки ориентации плеера в портретном режиме.Как заблокировать viewController в портретном режиме

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

Но не сработало. Как устранить эту проблему.

ответ

6

Чтобы заблокировать ViewController в режиме выполните следующие действия:

В вашем AppDeletegate добавить:

var shouldSupportAllOrientation = false 
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { 
    if (shouldSupportAllOrientation == true){ 
     return UIInterfaceOrientationMask.All 
    } 
    return UIInterfaceOrientationMask.Portrait 
} 

Теперь перейдите каждый вид и добавить следующее в viewWillAppear:

режиме Portait только

let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
appdelegate.shouldSupportAllOrientation = false 

Все режимы

let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
appdelegate.shouldSupportAllOrientation = true 

Update
Если вы хотите перейти от пейзажа обратно к портрету еще раз, когда вы меняете вид/вкладку, добавьте следующий код

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

Swift 3. x версия

Добавьте это в свой класс AppDelegate

var shouldSupportAllOrientation = false 
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 
    if (shouldSupportAllOrientation == true){ 
     return UIInterfaceOrientationMask.all 
    } 
    return UIInterfaceOrientationMask.portrait 
} 

Добавить это в ViewController

// Portrait mode 
let appdelegate = UIApplication.shared.delegate as! AppDelegate 
appdelegate.shouldSupportAllOrientation = false 

// All modes 
let appdelegate = UIApplication.shared.delegate as! AppDelegate 
appdelegate.shouldSupportAllOrientation = true 
+0

Это не работает. Тот же вопрос все еще существует. – vipulk617

+0

Добавили ли вы вышеуказанный код в AppDeletegate и каждый ViewController, который у вас есть?Добавили ли вы контрольные точки и проверили, что эти блоки кода действительно запущены? –

+0

Да, я добавил код выше в AppDelegate и каждый viewController. А также проверено с точками прерывания, метод метода AppDelegate, как мы и ожидали, но не работал, как я ожидал. – vipulk617

1

Вы должны сначала перейти в общие настройки проекта и убедитесь, что «ориентация устройства» установлен на Портрет (и, возможно, Upside Down)

enter image description here

Затем в файле info.plist,

Проверьте ключ Поддерживаемые ориентации интерфейса. Удалите все его ключи, кроме единственной клавиши портрета. Просмотрите изображение ниже.

enter image description here

Это заставит приложение работать в портрете. Даже когда вы закроете плеер в альбомном режиме, ваше приложение вернется в портретный режим.

+0

Я уже использовал это, но не работал. – vipulk617

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