Как создавать универсальные приложения для iOS

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

Люди нередко владеют более чем одним устройством iOS. У многих людей, у которых есть iPhone, вероятно, где-то завалялся и iPad. Пользователи, владеющие несколькими устройствами, ожидают, что их приложения будут хорошо работать на любом экране рядом с ними. С тех пор, как Apple выпустила iPad, она поощряла разработчиков делать свои приложения универсальными, чтобы они работали как на iPhone, так и на iPad.

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

> Примечание
Если вы не сделаете свои приложения адаптивными, ваши пользователи будут иметь некачественный опыт при просмотре вашего приложения на другом устройстве. Представьте, что вы разработали свое приложение для форм-фактора iPhone SE, но один из ваших пользователей запускает его на 12,9-дюймовом iPad Pro. Вы, вероятно, представляете, как ужасно будет выглядеть ваш макет.

Пользователи, как правило, любят приложения, которые работают на любом устройстве, которым они владеют, и если вы не сделаете свое приложение совместимым с iPad, разработав его для iPhone, Apple все равно сделает его доступным для iPad. Ваше приложение будет работать в увеличенном поддельном разрешении iPhone, которое выглядит ужасно. Обычно требуется совсем немного усилий, чтобы ваше приложение хорошо работало на iPad, а вознаграждение велико. Чтобы ваше приложение отлично выглядело на всех размерах экрана, вы используете классы размеров.

Класс размера — это свойство, принадлежащее классу UITraitCollection. Коллекция свойств описывает функции, составляющие среду, в которой существует определенный контроллер представления. Некоторые из этих признаков описывают доступное пространство экрана. Но они также сообщают вам, поддерживает ли экран широкую цветовую гамму и присутствуют ли возможности принудительного касания. Сейчас вы сосредоточитесь на классах размеров. На момент написания статьи существует два класса размеров: обычные и компактные. В следующем списке показаны несколько доступных форм-факторов устройств и соответствующие им классы размеров во всех ориентациях:
• iPhone большого размера, iPhone X(s) и iPhone Xs max:
• Книжная ориентация: компактная ширина x обычная высота
• Альбомная ориентация: обычная ширина x компактная высота
• Все остальные iPhone:
• Книжная ориентация: компактная ширина x обычная высота
• Альбомная ориентация: компактная ширина x компактная высота
• Все размеры iPad:
• Книжная ориентация: обычная ширина x обычная высота
• Альбомная ориентация: обычная ширина x обычная высота

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

> Примечание
Вы не должны использовать классы размера в качестве индикатора устройства, которое держит пользователь. iPad может выглядеть очень похоже на iPhone, если вы основываете свои предположения на классе размера. Как правило, это хорошо: вы должны оптимизировать свое приложение для возможностей, а не для конкретного устройства. Однако, если вам нужно знать, какой тип устройства держит пользователь, вы можете использовать userInterfaceIdiom в UITraitCollection, чтобы узнать имя текущего устройства.

Всякий раз, когда вы создаете новый проект в Xcode, приложение по умолчанию настраивается как универсальное. Это означает, что ваше приложение будет работать на всех устройствах, и когда вы опубликуете свое приложение в App Store, оно будет изначально доступно на iPad и iPhone. Если вам нужно изменить этот параметр, вы можете сделать это в настройках вашего проекта, изменив параметр «Устройства» с «Универсальный» на что-то другое, например, iPhone. На следующем снимке экрана показана эта опция в окне настроек проекта:

1.png

Как правило, вы предпочитаете создавать универсальное приложение, но иногда вы хотите настроить таргетинг на одно устройство. Имейте в виду, что выбор iPhone не делает невозможным запуск вашего приложения на iPad. Ваши пользователи могут загрузить версию вашего приложения для iPhone на свой iPad, после чего iPad отобразит приложение в масштабированном окне. На следующем снимке экрана показано, как это будет выглядеть для приложения Hello-Contacts:

2.png

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

На iPhone приложения обычно работают только в портретном режиме. Это нормально, и вы можете поддерживать альбомную ориентацию всякий раз, когда она соответствует вашему приложению. Единственная ориентация, которую немного странно поддерживать на iPhone, — это вверх ногами. Обычно не рекомендуется поддерживать эту ориентацию в приложении для iPhone.

Одно приложение может поддерживать разные ориентации экрана для iPhone и iPad. Это позволяет делать портрет приложения только на iPhone и поддерживать любую ориентацию на iPad. По умолчанию Xcode настраивает ваш проект так, чтобы он поддерживал все ориентации iPad, и только те, которые вы отметили в настройках проекта, поддерживаются для iPhone. Откройте файл Info.plist, чтобы просмотреть общие и специфичные для iPad конфигурации ориентации в разделе «Поддерживаемые интерфейсные ориентации». Если вы измените конфигурацию в настройках вашего проекта, ваш Info.plist также будет обновлен.

Помните, вы реализовали код, чтобы добавить поддержку отображения листа действий на iPad? Идите вперед и запустите Hello-Contacts на симуляторе iPad и нажмите и удерживайте один из контактов, чтобы увидеть всплывающее окно удаления. Всплывающее окно должно быть представлено, как показано на следующем снимке экрана:

3.png

Вы заметите, что всплывающее окно представлено не в лучшем месте. Пользователи, скорее всего, ожидают, что всплывающее окно появится рядом с изображением контакта, а не будет расположено полностью над ячейкой контакта. Текущая реализация для показа всплывающего окна выглядит так:

if let popOver = confirmationDialog.popoverPresentationController {
  popOver.sourceView = tappedCell
}

Предыдущий код устанавливает свойство sourceView во всплывающем окне. Всплывающее окно использует свойство sourceView в качестве контейнера для всплывающего окна. Это означает, что всплывающее окно добавляется как подпредставление свойства sourceView.

В дополнение к установке свойства sourceView вы также можете предоставить всплывающее окно со свойством sourceRect. Свойство sourceRect указывает область, в которой будет закреплено всплывающее окно. Координаты этой области относятся к свойству sourceView. Обновите код представления всплывающего окна со следующей реализацией, чтобы расположить всплывающее окно красиво рядом с изображением контакта:

if let popOver = confirmationDialog.popoverPresentationController {
  popOver.sourceView = tappedCell

  if let cell = tappedCell as? ContactCollectionViewCell {
    let imageCenter = cell.contactImage.center
    popOver.sourceRect = CGRect(x: imageCenter.x,  y: imageCenter.y,
                                width: 0,  height: 0)
  }
}

Несмотря на то, что это обновление не слишком сложное, оно представляет собой часть адаптивного кода, который оптимизирует внешний вид вашего приложения в определенном сценарии. Проверяя, существует ли popoverPresentationController, вы узнаете кое-что о среде, в которой работает ваше приложение.

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

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

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

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

Вот и все! Если вам понравилось читать эту статью и вы хотите узнать больше о создании потрясающих приложений для iOS, вы должны изучить Освоение программирования iOS 12 — третье издание. Написано Донни Уолсом, экспертом по разработке приложений для iOS. Освоение программирования iOS 12 — третье издание использует подход без излишеств, фокусируясь на обучении продвинутым концепциям с помощью серии небольших проектов и отдельных примеров, которые помогут вам получить опыт в различных аспектах разработки приложений для iOS.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *