Лекция 5 охватывает множество важных тем:
- взаимодействие Модели и Controller с целью изменения View,
- жесты, которые являются “входом” для нашего приложения,
- множественные MVC и как построить большие приложения, которые состоят из комбинаций различных MVCs,
- segues и подготовка MVC с помощью метода prepare (forSegue:)
В начале Лекции 5 обсуждается Модель для приложения FaceIt, которая позволяет задавать «выражение лица». В Controller в виде переменных vars создаются две «зеленые стрелки«: одна — к Модели, другая — к View . Помните их на картинках, посвященных MVC? Для удержания Модели и View в синхронном состоянии для обеих переменных vars используется очень крутая возможность Swift — Наблюдатели Свойств (Property Observers), одним из которых является didSet {}. Но, оказывается, didSet {} срабатывает не всегда. Как «разрулить» эту ситуацию и рассказывает Пол Хэгерти в начале Лекции 5. Чрезвычайно полезная вещь.
Далее следует очень подробная теоретическая и практическая часть Лекции 5, посвященная работе с самыми разными жестами: pinch (стягивание), pan (движение по экрану), rotation (вращение), swipe (смахивание), tap (стук). Большое внимание уделяется обеим сторонам процесса распознавания различных жестов: как РАСПОЗНАВАТЕЛЮ ЖЕСТА, так и ОБРАБОТЧИКУ ЖЕСТА. В то время, как РАСПОЗНАВАТЕЛЬ ЖЕСТА может размещаться только на View, воспринимая жест как «входной» сигнал от пользователя, ОБРАБОТКА ЖЕСТА может вестись в различных частях приложения в зависимости то того, управляет ли жест экранно-зависимыми элементами UI или непосредственно
Моделью. Жесты — это супер мощное средства, но и очень простое в использовании, так как вся логика распознавания жестов ложится на iOS. Система IOS великолепно определяет разницу между жестами, когда один сменяет другой.
Демонстрационный пример показывает работу с тремя совершенно различными жестами : pinch, swipe и tap. Один воздействует на наш View, а два других — на Модель.
В конце лекции Пол Хэгерти переходит к большой теме « Множественные MVCs«. Очень подробно рассматриваются принципы функционирования TabBarController, SplitViewController и NavigationController. Работа SplitViewController рассмотрена на примере «Графического Калькулятора», который является целью Задания на программирования №3, так что в этой Лекции вы получите все необходимые подсказки для его выполнения. Но больше всего внимания уделено принципам функционирования самого распространенного Множественного MVC — NavigationController, который помимо основных функциональных возможностей, является адаптивной версией SplitViewController для iPhone (не +). Показано как практически на storyboard вставить или «подцепить» множество MVCsк TabBarController, SplitViewController и NavigationController.
Но одно дело подсоединить их на storyboard, и совсем другое, когда будет работать пользователь, нажимая на кнопки и и другие UI элементы, перемещаясь между различными MVCs. В этом случае «переезд» между различными MVCs осуществляют segues. Они всегда создают новый экземпляр вызываемого MVC и нуждаются в инициализации этого MVC, например, с использованием метода prepareForSegue.
Для успешного использовать segues, надо понимать, что в мире множественных MVCs каждый отдельный MVC является “объектно-ориентированым” в том смысле, что он «живет» в своем собственный мире. У него есть некоторый public API и мы можем взаимодействовать с ним, устанавливая определенные вещи в этом public API, а дальше он делает то, что должен делать и нам не отвечает.
Лекция 5 и слайды на английском языке находятся на iTunes название “5. Gesture, and Multiple MVCs.» Код демонстрационного примера «FaceIt L5» доступен как на iTunes название “Lecture 5 Demo Code: FaceIt.«, так и на Github.
Русскоязычный неавторизованный конспект лекции 5, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также Google Doc доступны на платной основе.