Лекция 5 CS193P Winter 2017 — Жесты и множественные MVCs.

Лекция 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 доступны на платной основе.