Вступление
С iOS 9 Apple представила ряд возможностей многозадачности для iPad. К ним относятся « Скольжение» , « Разделение» и « Картинка в картинке» . Если вы не знакомы с этими новыми функциями, вот краткий обзор.
Скользить по
Slide Over доступен на iPad Mini 2 и более поздних версиях, на всех моделях iPad Air и iPad Pro. Это позволяет приложениям скользить с правой стороны экрана при полной высоте экрана (в обоих направлениях) и приблизительной ширине экрана iPhone.
Картинка в картинке
Картинка в картинке доступна на всех моделях iPad, которые поддерживают функцию Slide Over. Это позволяет продолжать воспроизведение видео в небольшом представлении, пока вы работаете с другими приложениями на iPad. Этот небольшой вид содержит три кнопки для управления воспроизведением, возврата в полноэкранный режим, воспроизведения / паузы и закрытия. Вид можно изменить или временно отодвинуть в сторону экрана.
Разделенный вид
Split View доступен для iPad Mini 4, iPad Air 2 и iPad Pro. Это позволяет iPad одновременно запускать два полнофункциональных приложения. Пользователь может перемещать разделитель между двумя приложениями, чтобы изменить их размер.
Обратите внимание, что приложение слева называется основным приложением, а приложение справа — вторичным. приложение. Основное приложение владеет строкой состояния устройства и всегда занимает как минимум половину экрана. Основное приложение может быть отклонено пользователем, однако, если они переместят разделитель полностью влево.
Предпосылки
Это руководство требует, чтобы вы работали с Xcode 7 или новее на OS X Yosemite или новее. Это также предполагает, что вы узнали о классах размера и Auto Layout . Если вы новичок в адаптивном дизайне, то я рекомендую прочитать урок Джордана Моргана по адаптивному дизайну . Вам также необходимо скачать стартовый проект с GitHub .
1. Перемещение и разделение
конфигурация
По умолчанию все приложения, созданные из любого шаблона XCode 7, автоматически поддерживают режимы слайд-шоу и разделения. Это связано с тем, что ваше приложение создается с файлом LaunchScreen.storyboard и включенным классом размера файла Main.storyboard .
Для проектов, которые были созданы с более ранней версией Xcode, вы можете включить Slide Over и Split View для вашего приложения, выполнив следующие два шага.
Шаг 1
Создайте файл LaunchScreen.storyboard , выбрав iOS> Интерфейс пользователя> Шаблон экрана запуска . Экран запуска отобразится, как только ваше приложение будет запущено с главного экрана и пока оно все еще загружается.
Обратите внимание, что эта раскадровка заменяет статические образы запуска, которые вы уже настроили для своего приложения.
Шаг 2
Убедитесь, что ваш пользовательский интерфейс использует классы размеров и Auto Layout . Вы можете убедиться в этом, выбрав раскадровку вашего проекта, открыв инспектор файлов и отметив флажок « Использовать автоматическую компоновку» и Установите флажки « Классы размера» в разделе « Документ Интерфейсного Разработчика ».
Обратите внимание, что вам нужно сделать это для каждой раскадровки в вашем проекте. Теперь, когда вы знаете, как правильно настроить приложение для Slide Over и Split View, пришло время узнать, как обеспечить, чтобы ваше приложение работало хорошо вместе с другими приложениями.
Классы размера
Для Slide Over текущий класс размера вашего приложения при запуске всегда будет одинаковым. Когда ваше приложение является основным приложением, оно будет иметь доступ к полноэкранному режиму (класс обычной ширины и высоты), и ничто не будет отличаться. Когда ваше приложение открывается с помощью функции «Скольжение», оно будет иметь компактную ширину и класс размера обычной высоты независимо от ориентации.
Однако на iPad, поддерживающем режим Split View, размер окна вашего приложения можно изменить в любой момент, и он должен соответствовать этим размерам. На следующей диаграмме показаны различные конфигурации размеров приложения Split View и связанные с ними классы размеров:
Как видите, если ваше приложение не является основным приложением, а устройство находится в горизонтальной ориентации, как только вам придется делить экран с другим приложением, ваше приложение будет переведено в класс компактного размера. Поскольку это изменение размера зависит от пользователя и может произойти в любое время, ваше приложение должно иметь возможность плавного перехода между различными размерами представления.
Обратите внимание, что на iPad Pro в горизонтальном режиме и режиме разделенного просмотра 50/50 оба приложения получают класс горизонтального размера с обычной шириной, как показано ниже.
Методы обратного вызова
Чтобы учесть эти изменения в размере, класс UIViewController
соответствует двум протоколам, UITraitEnvironment
и UIContentContainer
.
UITraitEnvironment
Этот протокол содержит свойство UITraitCollection
называемое traitCollection
и метод для изменения этой коллекции признаков traitCollectionDidChange(_:)
. Этот объект коллекции признаков позволяет вам узнать конкретные сведения о рабочем состоянии вашего приложения, такие как масштаб отображения, текущие классы размеров по горизонтали и вертикали, возможность 3D-касания (называемая API-интерфейс Force Touch) и текущий тип устройства. (iPhone / iPod Touch, iPad, Apple TV или не указано ).
UIContentContainer
Этот протокол содержит свойство lovelyContentSize, а также многочисленные методы для изменения размера или набора признаков для текущего контейнера. Мы подробнее рассмотрим два метода, определенных протоколом UIContentContainer
.
Откройте стартовый проект, который вы загрузили с GitHub, и перейдите к ViewController.swift . Затем добавьте следующие методы в определение класса:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
self.viewWidth.text = «\(size.width)pts wide»
}
override func willTransitionToTraitCollection(newCollection: UITraitCollection, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.willTransitionToTraitCollection(newCollection, withTransitionCoordinator: coordinator)
switch newCollection.horizontalSizeClass {
case .Compact:
self.sizeClass.text = «Compact Horizontal Size Class»
case .Regular:
self.sizeClass.text = «Regular Horizontal Size Class»
case .Unspecified:
self.sizeClass.text = «Unspecified Horizontal Size Class»
}
}
|
В viewWillTransitionToSize(_:withTransitionCoordinator:)
мы обновляем метку viewWidth
для отображения новой ширины экрана.
В willTransitionToTraitCollection(_:withTransitionCoordinator:)
мы проверяем, к какому классу горизонтального размера выполняется переход, и соответствующим образом sizeClass
метку sizeClass
.
Возможно, вы заметили, что оба метода предоставляют параметр UIViewControllerTransitionCoordinator
. Этот объект в основном используется для работы с анимацией между контроллерами представления, и он на самом деле не относится к многозадачности Split View, поскольку система обрабатывает анимации. Параметр UIViewControllerTransitionCoordinator
существует, поскольку эти UIContentContainer
протокола UIContentContainer
не являются исключительными для многозадачности с разделенным видом и могут также выполняться в других сценариях.
Запустите приложение на физическом устройстве или в симуляторе iPad Air 2 или iPad Pro. После запуска приложения перетащите курсор с правой стороны экрана и выберите любое приложение в списке.
Когда приложение откроется, нажмите и удерживайте небольшую панель слева от только что открытого приложения, как показано ниже.
Перетащите разделитель, который появляется в середину экрана, как показано на следующем снимке экрана, и отпустите его.
Когда ваше приложение вернется обратно, две метки должны обновиться с правильной шириной вида и классом размера по горизонтали.
2. Картинка в картинке видео
Как с Slide Over и Split View, если вы используете Xcode 7 или более позднюю версию, то ваше приложение автоматически будет поддерживать функцию «картинка в картинке». Для аудиовизуального контента это делается с помощью класса AVPlayerViewController
.
Однако прежде чем вы сможете начать использовать Картинку в картинке, вам нужно включить функцию для вашей цели. Выберите цель, откройте вкладку « Возможности » в Навигаторе проекта , включите фоновые режимы и установите флажки « Аудио, AirPlay» и «Картинка в картинке» .
Запустите приложение снова и нажмите кнопку « Воспроизвести видео» . Видео, которое я включил в стартовый проект, начнет воспроизводиться. Во время воспроизведения видео перейдите на главный экран, нажав кнопку «Домой» на вашем устройстве или « Command-Shift-H», если вы используете симулятор.
Кроме того, вы можете нажать маленькую кнопку в левом нижнем углу, чтобы перейти в режим «Картинка в картинке». Вы увидите, что просмотр видео сворачивается и остается на экране, в комплекте с кнопками для повторного открытия, воспроизведения / паузы и закрытия.
На этом этапе вы заметите, что если вы нажмете кнопку, чтобы снова начать просмотр видео в полноэкранном режиме, приложение откроется, но контроллер просмотра воспроизведения видео вообще не появится. Вы можете изменить это поведение, согласовав контроллер представления с протоколом AVPlayerViewControllerDelegate
.
Начните с ViewController
класса ViewController
соответствие с протоколом AVPlayerViewControllerDelegate
.
1
|
class ViewController: UIViewController, AVPlayerViewControllerDelegate
|
Затем замените prepareForSegue(_:sender:)
на следующую реализацию:
1
2
3
4
5
6
7
8
|
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destination = segue.destinationViewController as!
AVPlayerViewController
destination.delegate = self
let url = NSBundle.mainBundle().URLForResource(«Video», withExtension: «mp4»)!
destination.player = AVPlayer(URL: url)
destination.player?.play()
}
|
Наконец, добавьте метод playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart(_: AVPlayerViewController)
протокола AVPlayerViewControllerDelegate
в класс ViewController
.
1
2
3
|
func playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart(playerViewController: AVPlayerViewController) -> Bool {
return false
}
|
Реализуя этот метод, мы гарантируем, что контроллер просмотра видеопроигрывателя не закрывается при входе в режим «картинка в картинке». Снова соберите и запустите приложение, и вы увидите, что при повторном открытии из рисунка в картинке видео продолжит воспроизводиться.
Если вы не используете AVPlayerViewController
для воспроизведения своего контента, есть и другие способы, которыми вы можете поддерживать видео «картинка в картинке». Если вы используете AVPlayerLayer
для создания пользовательского интерфейса вокруг вашего видео, вы можете создать объект AVPictureInPictureController
для поддержки функции «картинка в картинке». Вот как могла бы выглядеть такая реализация:
01
02
03
04
05
06
07
08
09
10
11
|
self.pictureinPictureController = AVPictureInPictureController(playerLayer: layer)
self.pictureinPictureController.delegate = // Any object conforming to the AVPictureInPictureViewControllerDelegate protocol
if AVPictureInPictureController.isPictureInPictureSupported() {
// Display button to enter Picture in Picture
}
…
func pictureinPictureButtonPressed() {
self.pictureInPictureController.startPictureInPicture()
}
|
3. Отключение многозадачности iPad
Если по какой-то причине вы не хотите, чтобы ваше приложение поддерживало режим «Скольжение», «Разделение» или «Картинка в картинке», вы можете переопределить поведение по умолчанию, предоставляемое Xcode и iOS.
Скользить и разделить вид
Для просмотра слайдов и разделенного просмотра все, что вам нужно сделать, это добавить ключ UIRequiresFullScreen
в файл Info.plist вашего приложения и установить для него значение YES
.
Картинка в картинке
С классом AVPlayerViewController
вам просто нужно установить для свойства allowsPictureInPicturePlayback
значение false
.
Для Картинки в Картинке с объектом AVPlayerLayer
вы не создаете AVPictureInPictureController
.
Наконец, для видео, отображаемых через Интернет с помощью WKWebView
, необходимо установить для свойства allowsPictureInPicturePlayback
configuration
значение false
.
Вывод
Теперь вы должны быть уверены в создании приложений, которые поддерживают новые функции многозадачности «Скольжение», «Разделение на части» и «Картинка в картинке», добавленные в iPad на iOS 9. Как вы можете видеть, эти новые функции делают iPad гораздо более производительным инструментом, и они разработчикам очень легко реализовать в собственных приложениях.
Как всегда, вы можете оставить свои комментарии и отзывы в комментариях ниже.