Статьи

Разработка и создание приложения для телефона 1980-х годов для iOS: настройка Interface Builder

Добро пожаловать в третий выпуск нашей серии о том, как спроектировать и создать версию iOS-приложения для телефона 1980-х годов. В этом уроке мы рассмотрим Xcode и Interface Builder, чтобы настроить базовую иерархию представлений нашего приложения и разложить дизайн приложения на отдельные компоненты iOS SDK.

Это снимок того, что мы будем строить в течение этой серии:

Окончательный предварительный просмотр приложения 1980-х годов

Это серия из нескольких частей, предназначенная для обучения промежуточным темам iOS SDK. Содержание будет становиться все более сложным по мере развития серии. Если в какой-то момент вы потеряли себя в следовании этой серии, возможно, вам придется сделать шаг назад и пройтись по нашей серии Learn Objective-C или серии Beginning iOS SDK Development .

Откройте Xcode и создайте новый проект. Беглый взгляд на дизайн проекта показывает, что все наши представления представлены с помощью UITabBar , поэтому выберите шаблон « UITabBar вкладок»:

фигура 1

Не стесняйтесь называть проект как хотите, но эта серия будет называться «PhoneAppSkin»:

фигура 2

В панели Xcode «Группы и файлы» откройте группу «Ресурсы» и дважды щелкните файл MainWindow.xib . Как видите, выбор шаблона « FirstView.xib вкладок» создал приложение с двумя вкладками, загруженными из файлов FirstView.xib и SecondView.xib соответственно.

Рисунок 3

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

Работая слева направо, первая вкладка в нашем приложении предназначена для представления «Контакты». Давайте начнем настройку UIViewController вкладок, создав подкласс UIViewController только для этого представления.

Вернитесь к Xcode и найдите группу «Classes» на панели «Groups & Files». Щелкните правой кнопкой мыши группу и выберите « Добавить»> «Новый файл» :

Рисунок 4

Выберите «UIViewController subclass» из доступных шаблонов файлов и отметьте опцию «С XIB для пользовательского интерфейса»:

Рисунок 5

Назовите файл ContactsViewController и нажмите «Готово».

Переименуйте файл ContacsViewController.xib в ContactsView.xib и перетащите его из группы «Классы» в группу «Ресурсы».

Затем дважды щелкните файл ContactsView.xib чтобы открыть его в Интерфейсном Разработчике.

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

Комп 03

Контроллер панели вкладок уже создан для нас, и мы на мгновение создадим контроллер навигации. Итак, пока мы просто добавим табличное представление как подпредставление представления контактов.

Если он еще не отображается, откройте окно «Библиотека» в Интерфейсном Разработчике, выбрав « Инструменты»> «Библиотека» в меню приложения. Введите UITableView в поле поиска и перетащите объект UITableView из окна библиотеки в представление контактов:

Рисунок 6

Размер контроллера представления, чтобы заполнить представление контактов:

Рисунок 7

С нашим созданным контроллером представления контактов, пришло время интегрировать его в наш контроллер панели вкладок. Для этого мы собираемся встроить его в качестве корневого контроллера представления объекта UINavigationController , а затем поместить этот UINavigationController на первую вкладку UITabBarController .

Сохраните ваши изменения и переключитесь обратно в файл MainWindow.xib в Интерфейсном Разработчике. В окне «Библиотека» введите UINavigationController в поле поиска. Перетащите экземпляр объекта контроллера навигации на панель вкладок, отображаемую в представлении «Окно»:

Рисунок 8

Вы можете видеть, что на панели вкладок теперь отображается панель навигации с заголовком «Root View Controller» вверху. Нашим следующим шагом будет установка корневого контроллера представления объекта UINavigationController на контроллер представления контактов, который мы создали ранее. Для этого раскройте объект контроллера навигации в MainWindow.xib , выберите дочерний объект View Controller, а затем проверьте свойства этого контроллера представления, выбрав « Инструменты> Инспектор» в строке меню Interface Builder. После этого ваш экран должен выглядеть примерно так:

Рисунок 9

Выберите вкладку «Удостоверение» в инспекторе и задайте для имени класса ContactsViewController :

Рисунок 10

Затем на вкладке «Атрибуты» в инспекторе установите для заголовка «Контакты» и для имени NIB «ContactsView»:

Рисунок 11

Наконец, в организаторе MainWindow.xib выберите элемент UINavigationItem меткой «Элемент навигации (контакты)». На вкладке «Атрибуты» окна инспектора для этого объекта установите заголовок «Контакты»:

Рисунок 12

На данный момент, есть еще одна конфигурация, которую нам нужно сделать, чтобы иметь базовую настройку структуры представления «Контакты». Дважды щелкните текст «Элемент» на панели вкладок, который мы добавили вместе с объектом контроллера навигации, и измените текст на «Контакты», чтобы соответствовать дизайну:

Рисунок 13

Сохраните свою работу в Интерфейсном Разработчике и соберите и запустите свой проект в XCode. Если все прошло хорошо, ваше приложение должно выглядеть примерно так в симуляторе:

Рисунок 14

С этой первоначальной основой для представления вкладки «Контакты» мы готовы перейти к настройке представления вкладки «Телефон».

В XCode следуйте процессу, описанному в Шаге 2, чтобы добавить другой пользовательский UIViewController в группу «Классы». На этот раз назовите контроллер PhoneViewController и переименуйте файл PhoneViewController.xib в PhoneView.xib прежде чем перетаскивать его в группу «Ресурсы» с другими файлами XIB.

Дважды щелкните файл PhoneView.xib чтобы открыть его в Интерфейсном PhoneView.xib . Перетащите объект UILabel из окна библиотеки Interface Builder в представление. Введите текст «Просмотр телефона» в метку:

Рисунок 15

Вернитесь к файлу MainWindow.xib в Интерфейсном Разработчике. В окне «Библиотека» найдите UIViewController и перетащите объект контроллера представления на панель вкладок сразу после вкладки «Контакты» и непосредственно перед вкладкой «Первый».

Рисунок 16

Переименуйте заголовок вкладки в «Телефон», чтобы соответствовать нашему дизайну:

Рисунок 17

Как и раньше, вам нужно развернуть объект контроллера панели вкладок в органайзере MainWindow.xib и найти новый контроллер представления, который вы только что добавили на панель вкладок; он должен быть помечен как «Выбранный контроллер просмотра (телефон)». На вкладке атрибутов окна «Инспектор» для этого объекта установите для поля заголовка «Телефон» и для поля имени NIB «PhoneView»:

Рисунок 18

Перейдите на вкладку «Идентичность» в Инспекторе. Установите класс для этого объекта в «PhoneViewController»:

Рисунок 19

Прежде чем сохранить свою работу в Интерфейсном Разработчике и протестировать изменения, давайте продолжим и отбросим лишние, стандартные вкладки «Первый» и «Второй» на панели вкладок. Для этого просто перетащите их из контроллера панели вкладок в забвение:

Рисунок 20
Рисунок 21

Сохраните свою работу в Интерфейсном Разработчике и переключитесь обратно на XCode.

В группе «Классы» найдите файлы FirstViewController.h и FirstViewController.m . Щелкните правой кнопкой мыши по этим файлам и выберите «Удалить». При появлении запроса выберите «Также переместить в корзину». Сделайте то же самое для файлов FirstView.xib и SecondView.xib папке «Ресурсы».

Сохраните свою работу, соберите и снова запустите ваш проект в симуляторе. Теперь это должно выглядеть так:

Рисунок 22

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

Однако представление вкладки настроек не является частью более сложной иерархии представлений, для которой необходимо будет выдвигать или извлекать дополнительные виды с экрана, как на вкладке Контакты, поэтому использование объекта контроллера навигации не требуется. Вместо этого мы можем просто использовать UIImageView для пользовательского фона и UILabel для текста.

В XCode следуйте образцу, установленному в обоих шагах 2 и 3, чтобы добавить новый UIViewController подкласса UIViewController в папку классов. Назовите класс «SettingsViewController» и переименуйте файл XIB в «SettingsView», прежде чем перетаскивать XIB в группу «Resources».

Откройте SettingsView.xib в Интерфейсном UILabel и добавьте одну UILabel к центру представления. Установите текст метки на «Просмотр настроек».

Теперь вернитесь к файлу MainWindow.xib в Интерфейсном Разработчике и выполните процедуру, начиная с шага 3, чтобы добавить новую вкладку объекта контроллера представления. Установите заголовок вкладки «Настройки», чтобы он соответствовал нашему дизайну, а на вкладке атрибутов окна «Инспектор» для нового контроллера представления установите значение поля имени NIB на «SettingsView» и значение поля заголовка на «Настройки». На вкладке «Идентификация» окна «Инспектор» установите для класса «SettingsViewController».

Сохраните свою работу в Интерфейсном Разработчике и соберите и снова запустите свое приложение. Если все прошло хорошо, теперь вы можете пролистать экраны ниже:

Рисунок 23

С помощью Interface Builder мы смогли очень быстро настроить базовую иерархию представлений в соответствии с проектом, созданным Callum Chapman в частях 1 и 2 этой серии. Конечно, все объекты, которые мы используем, все еще нуждаются в настройке, и для этого мы создадим Форму графического запроса для отправки обратно в Callum, который затем разделит свой PSD-файл на отдельные графические файлы, которые нам понадобятся для создания скинов. интерфейс.

Если вы особенно любите приключения и будете работать со всеми учебными пособиями в этой серии, тогда рассмотрите эту форму, которую я отправляю вам для соединения! 🙂

Чтобы определить графику, необходимую для нашего приложения, и запросить ее у Callum, мы сначала должны деконструировать финальный предварительный просмотр, созданный Callum, на отдельные объекты, а затем наметить стратегию для каждой темы.

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

  • Значок приложения

    Значок приложения — это логотип, который наши пользователи будут нажимать для запуска приложения. На дисплеях без сетчатки этот значок должен иметь размер 57×57 пикселей, а на экранах с сетчаткой — 114×114 пикселей. Должно быть предоставлено в формате PNG.

  • Экран загрузки

    Как следует из названия, экран загрузки приложения будет отображаться сразу после того, как пользователь коснется значка нашего приложения, когда наше приложение загружается в память. Поскольку он будет заполнять весь экран, он должен соответствовать размеру дисплея iPhone, а именно 320×480 пикселей для стандартных экранов и 640×960 пикселей для экранов Retina. Как и в большинстве графических ресурсов iOS, экран загрузки должен быть представлен в формате PNG.

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

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

Комп 1

Следовательно, нам понадобятся следующие пользовательские значки UITabBarItem :

  • Значок контактов
  • Значок телефона
  • Значок настроек

Все вышеперечисленные значки должны быть предоставлены в двух разных состояниях: состояние по умолчанию (не выбрано) и выделенное (выбранное) состояние. Мы могли бы создать подсвеченное состояние программно, но я предпочитаю иметь растровое подсвеченное изображение состояния в качестве альтернативного варианта при запуске проекта. Размер этих изображений должен составлять 30×30 пикселей, а для дисплеев сетчатки предоставляется версия 60×60 пикселей. Они должны быть в формате PNG.

В дополнение к пользовательским значкам панели вкладок, вы заметили одну красную линию чуть выше фона панели вкладок? Нам понадобится пользовательский фон панели вкладок, который включает эту деталь. Изображение должно быть в формате PNG и должно иметь ширину 320 пикселей для стандартных экранов и 640 пикселей для сетчатки. Однако вместо того, чтобы запрашивать изображения с этими размерами, мы можем просто попросить линейный градиент, способный охватывать либо динамически.

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

Комп 2

Давайте добавим пользовательский фон UINavigationController (с красной линией вверху) в наши графические потребности для всего приложения. Это изображение должно быть в формате PNG, и, как и фон панели вкладок, должно быть способно охватывать ширину как стандартного, так и сетчатого дисплея. Судя по дизайну, похоже, что он также может быть представлен в виде линейного градиента, который может охватывать любую необходимую ширину.

Комп 03

Взгляд на этот экран показывает только один нестандартный элемент пользовательского интерфейса: настраиваемую кнопку раскрытия подробностей, которая должна отображаться на каждом UITableViewCell :

Комп 4

Остальная тема для этого экрана может быть обработана стандартными компонентами UIKit .

Комп 5

Для вкладки телефона мы можем деконструировать интерфейс на три основных объекта: UIImageView для фонового изображения, объекты UIButton для чисел UIButton , UIButton «del» и «dial», а также UILabel для отображения номера или серия объектов UIImage соединенных вместе, в зависимости от того, можем ли мы включить шрифт, используемый для отображения набора в нашем проекте. Если шрифт поставляется с iOS или доступен бесплатно с лицензией creative-commons, тогда мы можем использовать UILabel , в противном случае Callum потребуется предоставить отдельные изображения PNG для каждого номера.

Для всех объектов UIButton на этом экране нам понадобится состояние без сжатия и нажатия, однако мы должны иметь возможность просто использовать UILabel для фактического числа, отображаемого поверх фона кнопки, то есть нам действительно нужен только один стандарт. Фон UIButton для не нажатого состояния и один стандартный фон UIButton для UIButton состояния. Для кнопок «del» и «dial» у нас также должно быть отключенное состояние. Все эти ресурсы должны быть предоставлены в формате PNG с версиями для стандартных экранов и типов сетчатки.

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

Комп 6

Наконец мы подошли к вкладке настроек. Для этого экрана нам просто нужно несколько объектов UIImage для фона за заголовками «Предустановленные темы», «Цвет фона» и т. Д., А также несколько объектов UIButton для каждой опции выбора темы как в состоянии по умолчанию, так и в выбранном состоянии.

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

Теперь, когда у нас есть представление о том, какие графические ресурсы понадобятся для настройки нашего проекта, мы готовы скомпилировать их все вместе в форму запроса на сращивание. Используя шаблон выставления счетов в Pages в качестве своей базы, я быстро собрал следующее:

Рисунок 24

Версия страницы этого шаблона прилагается к загрузке вместе с этим постом.

Использовать что-то похожее в своих проектах? Разместите ссылку в комментариях ниже, так как запрос склеенной графики — очень распространенная задача!

Конечно, я бы не советовал просто отправлять такую ​​форму дизайнеру или команде дизайнеров без объяснения причин. В идеале вы можете настроить вызов с дизайнером в своем проекте и пройти их через каждую из этих точек, отвечая на вопросы по мере их возникновения.

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

В следующем уроке из этой серии будет показан Callum Chapman, демонстрирующий, как взять Форму графического запроса, созданную в этом уроке, и разделить файлы, необходимые для продолжения разработки приложения и создания тем. Дальнейшие выпуски в этой серии учебных пособий будут посвящены настройке UITableViewCell , UINavigationController , UITabBarController и других объектов, а также тому, как просматривать информацию адресной книги пользователя и набирать телефонные номера из вашего приложения.

Если вам понравился этот учебник и вы хотели бы видеть больше контента от Mobiletuts +, обязательно подпишитесь через RSS, подпишитесь на нас в Twitter или присоединитесь к нашей фан-странице Facebook, чтобы получать все последние обновления нашего контента!