Интересные статьи об Apple, приложениях для iPhone и iPad, iTunes

Начните разрабатывать приложения для iOS сегодня, часть 2

Начните разрабатывать приложения для iOS сегодня, часть 2
Автор: Applifto 16 января 2015, 10:30 #apple #xcode #ios #iphone #ipad #программирование #обучение

Начните разрабатывать приложения для iOS сегодня, часть 1

Процесс разработки приложения

Нахождение Концепции

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

Вот некоторые ключевые вопросы, которые следует обдумать при разработке концепции:

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

Какова цель вашего приложения? Для каждого приложения очень важно иметь чётко определённую цель. Частью определения цели является понимание того что именно будет мотивировать пользователей использовать ваше приложение.

Материал по теме: HTML5 в мобильной разработке — что выбрать?

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

Какой контент будет содержать ваше приложение? Обдумайте какой тип контента ваше приложение будет представлять пользователям и как они будут взаимодействовать с ним. Проектируйте пользовательский интерфейс так чтобы он дополнял контент в вашем приложении.

Проектирование Пользовательского интерфейса

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

Storyboard’ы позволяют вам спроектировать и реализовать ваш интерфейс в графической среде. В процессе реализации вы можете видеть что вы создаёте, получая незамедлительный отклик о том, что работает и что нет и сразу увидеть изменения интерфейса.

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

Иерархия Представлений

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

Наверху иерархии находится объект окно. Этот объект, представленный экземпляром класса UIWindow, служит базовым контейнером, в который вы можете помещать объекты представлений для отображения на экране. Само по себе окно не отображает ничего. Для отображения контента вы добавляете Представление для контента (с его иерархией подпредставлений) в окно.

Материал по теме: Ваше первое iOS приложение

Чтобы быть видимыми для пользователя представления контента и его подпредставления должны быть вставлены в иерархию представлений окна.

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

Типы представлений

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

Хотя каждое представление имеет свои специфические функции, UIKit представления могут быть сгруппированы в семь основных категорий:


Категория

Назначение

Примеры

image: ../Art/views_content.png
Content

Отображение специальных типов контента, таких, как изображения или текст.

Image view, label

image: ../Art/views_collections.png
Collections

Отображение коллекции или группы представлений.

Collection view, table view

image: ../Art/views_controls.png
Controls

Выполняют действия или отображают информацию.

Button, slider, switch

image: ../Art/views_bars.png
Bars

Навигация или выполнение действий.

Toolbar, navigation bar, tab bar

image: ../Art/views_input.png
Input

Получение ввода пользовательского текста.

Search bar, text view

image: ../Art/views_containers_2x.png
Containers

Служат как контейнеры для других представлений

View, scroll view

Modal

Прерывание нормального потока приложения для возможности пользователя совершать действия

Action sheet, alert view

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

Фреймворк UIKit предоставляет стандартные представления для показа множества типов контента, но вы также можете создать собственные представления с помощью наследования UIView (или его потомка). Собственные представления — это подкласс UIView, в котором вы обрабатываете все задачи, связанные с рисованием и обработкой событий. Вы не будете использовать собственные представления в этом руководстве, но вы можете узнать больше об их реализации в разделе Defining a Custom View в Programming Guide for iOS.

Используйте Storyboard’ы для разметки представлений

Вы используете storyboard для разметки вашей иерархии представлений в графической среде. Storyboard’ы предоставляют прямой, визуальный способ работы с представлениями и построением интерфейса.

Как вы видели в Руководство: Основы, storyboard’ы состоят из сцен и каждая сцена имеет свою иерархию представлений. Вы перетаскиваете представление из библиотеки объектов и располагаете его на сцене storyboard для автоматического добавления в иерархию. Позиция представления внутри этой иерархии определяется тем где вы располагаете его. После, вы добавляете представление на вашу сцену и можете изменять размер, конфигурировать и перемещать его по рабочей области.

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

Иерархия представлений, которую вы графически создаёте на сцене storyboard — является фактически «упакованным» набором Objective-C объектов. В момент времени выполнения эти «упакованные» объекты разархивирываются. В результате получится иерархия экземпляров соответствующих классов, которая сконфигурирована значениями, которые вы устанавливали с помощью различных инспекторов в области инструментов.

Материал по теме: Создаем быстрый прототип мобильного приложения

Как вы узнали в Tutorial: Basics, вы можете работать с интерфейсом, сконфигурированным по умолчанию в storyboard, и он подойдёт к любой версии вашего интерфейса. Когда вам нужно настроить ваш интерфейс в соответствии со специфическими размерами устройства или ориентацией, вы можете внести специфические изменения в разметку классов. Класс разметки — это совершенный путь для описания горизонтального и вертикального пространства, которое доступно в среде отображения, такой, как в портретном режиме iPhone или альбомном режиме iPad. Существуют два типа классов разметки: обычный и сжатый. Среда отображения характеризуется этими двумя классами, один из которых описывает горизонтальное пространство, а другой вертикальное. Вы можете просматривать и редактировать интерфейс в разных комбинациях этих классов, используя контроллы классов разметки на рабочей области:

image: ../Art/SC_H_size_button_any_any_2x.png

Вы не будете пользоваться специфическими классами разметки в этом руководстве, но если вам интересно узнать больше об этих классах, почитайте Size Classes Design Help.

Использование Инспекторов для Конфигурации Представлений

Панель инспекторов появляется в области утилиты выше библиотеки Объектов.

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

  • image: ../Art/inspector_file.pngFile. Позволяет вам установить основную информацию о storyboard.
  • image: ../Art/inspector_quick_help.pngQuick Help. Предоставляет удобную документацию об объекте.
  • image: ../Art/inspector_identity.pngIdentity. Позволяетвам установить индивидуальный класс для объекта и определить атрибуты доступности.
  • image: ../Art/inspector_attributes.pngAttributes. Позволяет вам визуально настраивать атрибуты объектов.
  • image: ../Art/inspector_size.pngSize. Позволяет вам устанавливать размер объекта и атрибуты Авто расположения.
  • image: ../Art/inspector_connections.pngConnections. Позволяет вам создавать соединения между вашим интерфейсом и исходным кодом.

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

Использование Авто Расположения для Позиционирования Представлений

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

Как вы уже увидели в Руководство: Основы, Xcode предлагает инструмент под названием Авто Расположение для создания универсального, адаптивного интерфейса. Авто Расположение — это система для отображения взаимосвязи между представлениями. Оно позволяет вам определить эти взаимосвязи в терминах ограничений конкретных представлений или между наборами представлений.

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

  • image: ../Art/al_align_2x.pngAlign. Используется для создания выравнивания ограничений, таких, как центрирование представления в контейнере или выравнивание двух представлений по левому краю.
  • image: ../Art/al_pin_2x.pngPin. Используется для создания области ограничений, таких, как определение высоты представления или определение его дистанции до другого представления по горизонтали.
  • image: ../Art/al_resolve_issues_2x.pngResolve Auto Layout Issues. Используется для решения расположения результатов, путём добавления или восстановления ограничений, основанных на указаниях.
  • image: ../Art/al_resizing_2x.pngResizing Behavior. Используется для определения того, как изменение размеров влияет на ограничения.

Для простого интерфейса, который вы создаёте для приложения Список дел, вам не нужно изучать что-либо об Авто Расположении на этом этапе. Когда расположение интерфейса приложения станет более системным вы добавите множество ограничений для того, чтобы определить как интерфейс должен располагаться на разных типах устройств и ориентации.

Определение взаимосвязи

iOS приложения базируются на  событийно-ориентированном программировании. Это когда поведение приложения определяется событиями: системными или действиями пользователя. Пользователи совершают действия в интерфейсе, которые запускают события в приложении. Эти события заканчиваются выполнением логикой приложения и манипуляцией над его данными. Ответ приложения на действия пользователя в дальнейшем отражаются в интерфейсе. Так как не разработчик, а пользователь зависит от того какой фрагмент кода выполняется, вам необходимо определить какие конкретно действия пользователь может делать и что произойдёт в ответе на это.

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

Контроллеры Представлений

После того как вы построите базовую иерархию представлений, следующим шагом будет контроль за визуальными элементами и ответом на ввод пользователя. В iOS приложении вы используете контроллер представлений (UIViewController) для управления контентными представлениями с их иерархией подпредставлений.

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

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

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

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

Действия

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

Вы определяете действие, создавая и реализовывая метод, возвращающий значение типа IBAction и имеющий параметр Sender.

— (IBAction)restoreDefaults:(id)sender;

Параметр sender — указывает на объект, который ответственен за запуск действия. Тип возвращаемого значения IBAction — это специальное ключевое слово, как, например, ключевое слово void, но оно указывает на то, что метод является действием, которое вы можете соединить с вашим storyboard в Interface Builder (поэтому ключевое слово имеет префикс IB). Вы узнаете больше о том, как соединить IBAction действие с элементом в storyboard в Руководство: Storyboard’ы.

Outlet

Outlet предоставляют способ ссылаться из файлов с исходным кодом на объекты из интерфейса, которые вы добавили в storyboard. Вы создаёте outlet, перетаскивая его с зажатым CTRL, из объектов storyboard в файл контроллера представлений. Это создаёт свойство для объекта в файле контроллера, который даёт вам доступ и возможность манипулировать этим объектом из кода во время выполнения. Например, во втором руководстве вы будете создавать outlet для текстового поля в приложении Список дел, чтобы получить возможность доступа к содержимому текстового поля в коде.

Выводы определяются как свойства IBOutlet

@property (weak, nonatomic) IBOutletUITextField *textField;

Ключевое слово IBOutlet говорит Xcode что вы можете присоединиться к этому свойству из Interface Builder. Вы узнаете больше о том, как присоединять выводы из storyboard к исходному коду в Руководство: Storyboard’ы.

Контроллы

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

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

Вот три основных категории типов событий:

  • События прикосновений и перетаскиваний. Происходят когда пользователь взаимодействует с контроллом, касаясь или перетаскивая. Например, когда пользователь касается пальцем кнопки, происходит событие Touch Down Inside; если пользователь перемещает палец за пределы кнопки, происходит соответствующее событие перетаскивания. Touch Up Inside посылается когда пользователь отпускает кнопку, оставаясь в её пределах. Если пользователь уберёт палец за пределы кнопки перед тем, как отпустить, что по сути является отменой действие касания, тогда произойдёт событие Touch Up Outside.
  • События Редактирования. Происходит когда пользователь редактирует поле текста.
  • События изменения значения. Происходят когда пользовать манипулирует контроллом, заставляя его выпускать серии разных значений.

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

Навигационные Контроллеры

Если в вашем приложении больше одной иерархии представлений контента вам нужно сделать возможным переход между ними. Для этого вы будете использовать специализированный тип контроллера: контроллер навигации ( UINavigationController). Контроллер навигации управляет перемещениями вперёд и назад по последовательности контроллеров, как, например, когда пользователь посещает и перемещается по Email аккаунту, сообщениям и индивидуальной почте в IOS Mail приложении.

Набор контроллеров, которыми управляет навигационный контроллер, называется навигационным стеком. Навигационный стек — это коллекция типа «последний пришёл и первый ушёл», состоящая из пользовательских контроллеров представлений. Первый элемент, добавленный в стек, становится корневым контроллером и никогда не выбрасывается из стека. Другие контроллеры могут быть добавлены или извлечены в/из навигационного стека.

Хотя главная работа контроллера навигации — это управление контроллером контента, он также отвечает за представление своих специальных представлений. В частности, он представляет навигационную панель, находящуюся наверху экрана, которая предоставляет информацию о том где пользователь находится внутри навигационной иерархии, содержит кнопку «Назад» и другие кнопки, которые вы можете настраивать. Каждый контроллер представлений, который добавляется в навигационный стек представляет эту навигационную панель. Вы ответственны за конфигурацию навигационной панели.

Как правило, вам не нужно делать какую-либо работу для извлечения из навигационного стека контроллера. Кнопка «Назад», предоставленная навигационным контроллером, делает это за вас. Однако, вы можете добавить вручную контроллер представлений в стек. Это можно сделать, используя storyboard’ы.

Использование Storyboard’ов для построения Навигации

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

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

Существуют несколько типов segues, которые вы можете создать:

  • Show. Этот segue добавляет новый контент в начало потока стека.Туда, где, показ контента будет зависеть от расположения контроллерана сцене.
  • Show detail. Этот segue также добавляет новый контент в начало стека или заменяет отображаемый контент, зависит от расположения контроллера на сцене.
  • Present modally. Модальный segue — это когда один контроллер представляет другой контроллер модально, требуя от пользователя выполнения некоторых операций в представленном контроллере перед тем, как вернуться в главный поток приложения. Модальный контроллер не добавляется в навигационный стек, вместо этого он, обычно, рассматривается как дочерний для существующего контроллера представлений. Существующий контроллер ответственен за освобождение созданного и представленного модального контроллера.
  • Popover presentation. Этот segue представляет контроллер как всплывающее меню, привязанное к существующему представлению.
  • Custom. Вы можете определить собственный переход, наследуясь от подкласса UIStoryboardSegue.
  • Unwind. Возвращающий segue перемещается обратно через один или более segue для возврата пользователя к существующему экземпляру контроллера. Вы используете возвращающий segue для реализации обратной навигации.

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

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