Youtube как просмотр в ландшафтном режиме с использованием классов размера в Ipad

Мне нужно изменить существующий вид в альбомной ориентации на что-то похожее на Youtube в альбомной ориентации. В настоящее время я использую классы размеров и раскадровку для достижения этого, но проблема в том, что мой макет должен значительно измениться в альбомной ориентации по сравнению с портретом, и поскольку размер Классы как для портретной, так и для альбомной ориентации ipad одинаковы, следует ли использовать отдельный контроллер представления для альбомной версии. Мой текущий портретный вид также немного сложен, в него встроены дочерние контроллеры представления. Каков наилучший подход для плавный переход от портрета ipad к альбомной ориентации. Как вы думаете, YouTube использует разные контроллеры просмотра / xib для достижения этой цели. Другая проблема заключается в том, что этот код был написан какой-то другой компанией, и данные мне инструкции заключаются в том, чтобы не изменять существующий код сильно .. не хочу сильно возиться с этим..

PFA для изображений того, как выглядит текущая версия и как она должна выглядеть в альбомной ориентации. Текущая версия

введите здесь описание изображения

Предлагаемая версия

введите здесь описание изображения

Редактировать 1: я уже реализовал viewWillTransitionToSize в своем контроллере представления. Мой вопрос в том, должен ли я использовать два разных xib или могу ли я вообще использовать другой контроллер представления для ландшафтной версии. Каковы плюсы и минусы этого? Как видно из приведенных ниже фотографий, мне нужно внести довольно много изменений в мою альбомную версию.

уменьшите размер видео, скройте сегментированный элемент управления и добавьте два табличных представления сбоку.


person Rango    schedule 19.01.2016    source источник


Ответы (1)


Вы должны реализовать протокол UIContentContainer метод viewWillTransitionToSize и проверьте ширину и/или высоту размера с помощью фрейма представления вашего контроллера представления и действуйте соответственно.

В Свифте:

override func viewWillTransitionToSize(size: CGSize,
    withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {


        if traitCollection.verticalSizeClass == .Regular && traitCollection.horizontalSizeClass == .Regular {

            if size.width > self.view.frame.size.width {

                // Moving to landscape

            } else {
                // Moving to portrait
            }
        }
}

Обсуждение

UIKit вызывает этот метод перед изменением размера представленного представления контроллера представления. Вы можете переопределить этот метод в своих собственных объектах и ​​использовать его для выполнения дополнительных задач, связанных с изменением размера. Например, контейнерный контроллер представления может использовать этот метод для переопределения свойств встроенных дочерних контроллеров представления. Используйте предоставленный объект-координатор для анимации любых вносимых вами изменений.

Если вы переопределяете этот метод в своих пользовательских контроллерах представления, всегда вызывайте super в какой-то момент своей реализации, чтобы UIKit мог соответствующим образом перенаправить сообщение об изменении размера. Контроллеры представлений пересылают сообщение об изменении размера своим представлениям и дочерним контроллерам представлений. Контроллеры представления передают изменение размера представленному контроллеру представления.

person Peter Hornsby    schedule 19.01.2016
comment
Он уже на месте и отслеживает изменения видео в полноэкранном и частичном режиме. Как показано на изображениях вопроса, поскольку в ландшафтном режиме мне нужно внести много изменений, если я использую два разных xib's / create новый контроллер представления для ландшафтной версии.. Как я уже сказал, я не хочу много возиться с существующим кодом.. - person Rango; 19.01.2016
comment
Я бы отслеживал изменения, которые вам нужно внести, и решал, слишком ли они велики для обработки в текущем контроллере представления, а затем использовал бы другой контроллер представления для представления альбомной ориентации, в противном случае попытайтесь внести изменения в текущий контроллер просмотра. - person Peter Hornsby; 19.01.2016