Лекция 9 CS193P Fall 2017 — «Жизненный цикл» View Controller и Scroll View.

В Лекции 9 рассматриваются две важных темы :

  • «жизненный цикл» View Controller,
  • Scroll View

“Жизненный цикл” View Controller — это  как View Controller рождается, живет, делает много интересных дел и затем умирает. Профессор подробно рассказывает нам о всех этапах жизни View Controller и о том, какие сообщения посылает ему система на протяжении его «жизненного цикла».  Он начинает с момента создания View Controller, затем следует подготовка View Controller для того случая, когда к этому View Controller кто-то “переезжает”  (segue). Следующий этап — установка ваших outlets, затем ваш View Controller появляется  на экране и может исчезнуть, и может опять появиться, и опять исчезнуть.  Затем его геометрия может быть изменена, например, при автоматическом вращении устройства.

Он не просто перечисляет такие методы «жизненного цикла» View Controller, как viewDidLoadviewWillAppearviewWillTransitionToSize и другие, но также очень подробно рассказывает о том, в каких ситуациях их нужно применять, а в каких воздержаться от их использования. Особое внимание уделяется тому, где следует стартовать такие затратные по времени задачи, как загрузка изображения из интернета.

Читать далее

Лекция 8 CS193P Fall 2017 — Animation (Анимация).

Сделав небольшой обзор различных типов анимации в iOS на прошлой Лекции 7, в  Лекции 8 профессор фокусируется на 3-х механизмах анимации views (UIViews):

  1. анимации свойств UIView с помощью аниматора UIViewPropertyAnimator
  2. переходах ( transition(with:)) между различными views 
  3. динамическом аниматоре Dynamic Animator, построенном на физике

Читать далее

Лекция 7 CS193P Fall 2017 — Multiple MVCs, Timer, and Animation (Множественные MVCs, Таймер и Анимация).

В Лекции 7 представлена подробная теоретическая и практическая часть такой большой темы как «Множественные MVCs«. Сначала подробно на конкретных приложениях рассматриваются принципы функционирования 3-х поставляемых Apple множественных MVCsTabBarController, SplitViewController и NavigationController. Наибольшее внимание уделено самому гибкому и мощному из всех множественных MVCs — NavigationController, который представляется в виде “стопки карт”, где каждая карта — это отдельный MVC. NavigationController позволяет вам положить конкретный MVC на самый верх “стопки карт”, загораживая все остальные карты, которые находятся ниже. Но это так сказать внешняя сторона функционирования множественных MVCs, которой они обращены к пользователю.

Читать далее

Лекция 6 CS193P Fall 2017 — Multitouch ( жесты).

В Лекции 6 продолжается рассмотрение гигантского демонстрационного примера, в котором с помощью игральной карты PlayingCardView рассказывается о том, что можно делать с пользовательскими (custom) views:

  • Создание пользовательского subclass UIView
  • Рисование с помощью Core Graphics и UIBezierPath
  • Режим contentMode у UIView (то есть перерисовка redraw против масштабирования битов при изменении границ bounds)
  • Рисование с прозрачностью
  • Больше ключей для словаря строки с атрибутами NSAttributedStringUIFont и NSParagraphStyle
  • UIFontMetrics масштабирование  шрифтов определенного стиля согласное c пользовательскими настройками (Setting) в Larger Text 
  • Управление subviews в вашем пользовательском UIView
  • Использование isHidden
  • Аффинные преобразования CGAffineTransform UIView
  • Приоритеты ограничений (Constraint Priority) в системе Autolayout
  • Assets.xcassets и рисование с помощью UIImage
  • @IBDesignable и @IBInspectable
  • Отображение изображений UIImage в Interface Builder

Читать далее

Лекция 5 CS193P Fall 2017 — Рисование в iOS.

В начале Лекции 5 рассматриваются небольшие темы :

  • Обработка ошибок в Swift
  • Использование Any  в Swift
  • «Кастинг типа» с помощью оператора as?
  • Другие интересные классы: NSObject, NSNumber, Date, Data

Но основная тема Лекции 5 — это views. Профессор сразу вводит уточнения в терминологию.  Он использует слово «view«в двух контекстах. Один из них — это >MVC. Буква V предназначена для View. В этом контексте View означает множество обобщенных (generic) миньонов вашего Controller. Этот View с заглавной буквойV в слове “View”, содержит множество views. Это именно те views, которым посвящена большая часть Лекции 5 и которые являются subclasses класса UIView в iOS.

views — это прямоугольные области на экране, в которых мы рисуем и получаем от пользователя так называемые “жесты прикосновения” (touch gestures), как одинарные, так и множественные. Но на Лекции 4 ведется разговор только о рисовании, управление жестами перенесено в Лекцию 6. Никогда раньше в своих курсах Пол Хэгарти не уделял столько внимания рисованию Views. Возможно, это связано с тем, что компактность кода и богатство синтаксических конструкций Swift позволяют представить рисование как увлекательный и очень интеллектуальный процесс.

Читать далее

Лекция 17 CS193P Winter 2017 — Accessibility (доступность для людей с ограниченными возможностями).

Лекция 17 посвящена инструментам, которые разработала Apple, чтобы адаптировать приложения разработчиков для людей с ограниченными возможностями. Лекцию читает бывший студент Стэнфорда, а ныне член команды Apple по Accessibility (Доступности).

Apple большое внимание уделяет возможностям работы пользователей с ограниченными возможностями с iOS устройства, рассматривая  4-х различных группы таких людей:

1-ая группа включают такие заболевания как аутизм, дислексия и другие формы невозможности обучения.

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

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

4-ая группа — слух. Это люди с широким спектром инвалидности: от плохо слышащих до абсолютно глухих.

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

Читать далее

Лекция 16 CS193P Winter 2017 — Alerts (экстренные сообщения) и Action Sheets (списки действий), Notifications (уведомления), Application Lifecycle («жизненный цикл» приложения) и Persistence (постоянное хранение).

В Лекции 16 освещаются разнообразные темы:

  • Экстренные сообщения Alerts и списки действий Action Sheets
  • Уведомления Notifications
  • “Жизненный цикл” приложения (UIApplication, AppDelegate, Info.plist, Capabilities)
  • Постоянное хранение Persistence

Alerts (экстренные уведомления) и Action Sheets (списки действий)

В iOS существуют два типа механизмов, которые позволяют с помощью “всплывающего окна” что-то спросить у пользователя. Один называется Alert  (экстренное сообщение), а другой — Action Sheets (список действий).

Они используют один и тот же API. Имеется некоторая разница между этими двумя механизмами. Наиболее легкий способ увидеть разницу между Alert и Action Sheets — это посмотреть пример, представленный на слайдах. В качестве такого примера Пол Хагерти взял уже знакомое нам приложение Cassini и на нем продемонстрировал все возможности Alert и Action Sheets. Особое внимание уделяется появлению Action Sheets в Popover «окошке» как на iPhone, так и на iPad. Профессор показывает демонстрационный пример использования экстренных сообщений Alert с текстовым полем внутри для нашего старого товарища — приложения FaceIt.

Читать далее

Лекция 15 CS193P Winter 2017 — Еще больше о Segues.

Вся Лекция 15 посвящена segues. Мы уже изучили на прошлых Лекциях Show segue и Show Detail segue, которые работают в Navigation Controllers и Split View Controllers.

На Лекции 15 изучаются все оставшиеся типы segues: Modal, Unwind, Popover, Emded.

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

Читать далее

Лекция 14 CS193P Winter 2017 — Демонстрационный пример Dynamic Animation.

Лекция 14 полностью посвящена демонстрационному примеру, показывающему все возможности Dynamic Animation на примере космической видеоигры Asteroids с астероидами и космическим кораблем. Динамическая анимация Dynamic Animation используется по большей части в UI для таких вещей, как анимация на iPhone всплывающей снизу панели, которая ударяется о верхний край, немного колеблется и “замирает”. Для написания таких игр, например, SpriteKit и другие. Но  профессор выбрал создание видеоигры для демонстрации возможностей динамической анимации Dynamic Animation потому, что это занимательно и это дает возможность насыщенно показать множество различных “поведений” их взаимодействие в сложном составном «поведении».

В демонстрационном примере показан целый спектр «поведений»:  столкновения UICollisionBehavior, гравитации UIGravityBehavior и мета-поведения UIDynamicItemBehavior, толчок UIPushBehavior, а также создание пользовательского составное сложное «поведение», которое является subclass UIDynamicBehavior. Показана работа делегата столкновений UICollisionBehaviorDelegate. По ходу дела, как всегда, Пол Хэгерти демонстрирует синтаксические конструкции Swift в действии:  lazy vars,  инициализация с помощью выполняемых замыканий, разрыв циклических ссылок в памяти с помощью списка захвата [ unowned self ]  в замыканиях и когда такой способ разрыва является безопасным.

Читать далее

Лекция 13 CS193P Winter 2017 — Timer и анимация.

На Лекции 13 рассматривается одна маленькая тема -таймер Time, и одна большая — анимация.
В начале Лекции 13 рассматривается очень простой маленький класс, таймер Time. Таймер — это просто способ выполнять блок кода снова и снова с некоторым периодом времени. В действительности мы не используем таймеры для анимации как таковой, но очень часто при выполнении анимации мы привлекаем иногда таймеры. 

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

Таймер создан на основе специальной iOS технологию Run loops. Для  main queue система автоматически устанавливает  для вас Run loops, так что на main queue Timer работает всегда.
Пол Хэгерти представляет демонстрационный пример, в котором использует  приложение FaceIt, и заставляет в нем «лицо» «моргать глазами». Для этого создается subclass, в котором используются два вложенных друг в друга таймера. Но это еще не настоящая анимация.

Основная часть лекции посвящена анимации. Профессор делает небольшой обзор типов анимации, которые доступны в iOS, но фокусируется на анимации views (UIViews).

Читать далее