2015-12-18 4 views
0

Есть ли способ разрешить ландшафтный режим только в одном контроллере просмотра в приложении? Я представляю его модально так:Представление avplayer по горизонтали

let recViewController = AVPlayerViewController() 
recViewController.modalTransitionStyle = .CoverVertical 
recViewController.player = AVPlayer(URL: NSURL(string: currentScores[selectedButtonIndexPath.row].recapAvailable)) 
recViewController.player.play() 

self.view.window?.rootViewController?.presentViewController(recViewController, animated: true, completion: nil) 

Я знаю, что может изменить вручную каждый контроллер представления, чтобы только для вертикальной ориентации (за исключением приведенных выше), но это кажется довольно утомительно.

ответ

0

Есть ли способ разрешить режим ландшафта только в одном контроллере просмотра в приложении?

Вы сами ответили на вопрос, см. Раздел «Configuring the View Rotation Settings» в описании класса UIViewController. Вам нужно настроить приложение для поддержки всех поворотов, которые вы хотите, а затем переопределить каждый контроллер представления, и да, это утомительно, но это работает :)

Обработка Просмотр Ротации На прошивке 8, все ротационное связанные с этим методы: устарели. Вместо этого вращения обрабатываются как изменение размера вида контроллера вида и поэтому сообщаются с использованием метода viewWillTransitionToSize: withTransitionCoordinator :. Когда изменяется ориентация интерфейса , UIKit вызывает этот метод в контроллере корневого представления окна. Затем этот контроллер представления уведомляет о своих дочерних контроллерах представления , распространяя сообщение по всему представлению .

В iOS 6 и iOS 7 ваше приложение поддерживает ориентацию интерфейса , определенную в файле Info.plist вашего приложения. Контроллер вида может переопределить метод supportedInterfaceOrientations, чтобы ограничить список поддерживаемых ориентаций . Как правило, система называет этот метод только на контроллере корневого представления окна или контроллере представления , который представлен для заполнения всего экрана; контроллеры детского просмотра используют часть окна, предоставленную для них по их родительскому виду , и больше не участвуют непосредственно в принятии решений о том, что поддерживаются вращениями . Пересечение ориентации приложения маска и маска ориентации диспетчера вида используются для определения , с помощью которых можно поворачивать ориентации контроллера вида.

Вы можете переопределить предпочтительныйInterfaceOrientationForPresentation для контроллер представления, который предназначен для представления полного экрана в определенной ориентации .

Когда вращение происходит для видимого контроллера зрения, willRotateToInterfaceOrientation: Длительность :, willAnimateRotationToInterfaceOrientation: Продолжительность :, и didRotateFromInterfaceOrientation: методы вызываются во время вращения. Метод viewWillLayoutSubviews также вызывается после того, как вид изменяется и позиционируется его родителем. Если контроллер вида не отображается при изменении ориентации, то методы вращения никогда не вызываются. Однако, когда вид становится видимым, вызывается метод viewWillLayoutSubviews . Ваша реализация этого метода может вызвать метод statusBarOrientation для определения ориентации устройства .


EDIT

Вы также можете посмотреть на UIApplicationDelegate Protocol, она имеет метод

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

Из документации:

Обсуждение

Этот метод возвращает общий набор ориентаций интерфейса , поддерживаемых приложением. При определении того, следует ли вращать конкретный контроллер просмотра , ориентации, возвращаемые этим методом, равны , пересекающимся с ориентациями, поддерживаемыми корневым представлением контроллера или верхнего представленного контроллера представления. Контроллер приложения и просмотра должен согласовать до разрешения вращения.

Если вы не реализуете этот метод, приложение использует значения в ключе UIInterfaceOrientation в файле Info.plist в качестве интерфейса по умолчанию .


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

  • Нет связанных вопросов^_^