Лекция 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.

Читать далее

Лекция 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).

Читать далее

Лекция 12 CS193P Winter 2017 — Autolayout (Автоматическая разметка).

Лекция 12 посвящена очень важной теме: механизму Autolayout (автоматическая разметка). Это блестящий мастер-класс по использованию Autolayout и концепции Size Classes, в котором профессор детально рассказывает абсолютно все о каждой опции.
Вначале дается обзор того, что нам уже известно об Autolayout  к этому моменту времени, так как во всех предыдущих лекциях элементы Autolayout  уже были представлены в той или иной степени. Это направляющие голубые пунктирные линии, это использование CTRL-перетягивания, как способа # 1 для создания ограничений системы Autolayout, а также меню «Pin» и «Align«. Очень важная роль в системе Autolayout  отводится такой концепции, как Size Class. Теперь в iOS без нее уже не обойтись. В iOS 10 существенно изменена работа с Size Classes. Нет больше неправдоподобных квадратных UI, как в iOS 9, все UI в iOS 10 выглядят естественно, переключение на различные конфигурации Size Classes выполняется очень просто. 
Общую большую картину всех ваших ограничений вы можете получить в Document Outline (схеме UI), который является своеобразной «штаб-квартирой» системы Autolayout,  Именно здесь можно определить, какие ограничения действуют в определенном Size Class, можно разрешить конфликты между ограничениями, можно вести «охоту» за «магическими» числами.

Читать далее

Лекция 11 CS193P Winter 2017 — Core Data Demo (Демонстрационное приложение).

Лекция 11 посвящена демонстрационному примеру «L11 Smashtag« с использованием Core Data. Этот пример построен на основе приложения  «L9 Smashtag«, которое по существу является клиентом Twitter, выбирающем твиты по специальной строке поиска типа #stanford. Он демонстрирует все теоретические положения Core Data, представленные на Лекции 10.

Задачей демонстрационного приложения  «L11 Smashtag« является показ списка всех пользователей Twitter, у которого есть твиты, содержащие в тексте поисковую строку, например,  #stanford . Должны быть учтены не только твиты, полученные из Twitter в результате последнего поиска  для строки #stanford, но и вообще все твиты, когда-либо связанные с поиском по строке #stanford. Для этого используется база данных Core Data. Каждый раз при получении твитов «из сети» с помощью специального фреймворка Twitter c Лекции 9, они не только показываются на экране, но и записываются в Core Data. Потом мы сможем запрашивать эти твиты и получать любую информацию, включая получение списка пользователей, которые имели твиты с текстом, содержащим, например, #stanford.

Подробно демонстрируются все этапы создания приложения с Core Data:

Читать далее

Лекция 10 CS193P Winter 2017 — Core Data (Объектно-ориентированная база данных).

В начале Лекции 10 в догонку темы Table View и предыдущей Лекции 9, профессор показывает очень интересный способ работы с Refresh Control для добавления «свежих» твитов в отдельные секции таблицы. Кроме того предлагается сделать запрос к Twitter более безопасным и c фильтром на ретвиты:
 Twitter.Request(search: «\(query) -filter:safe -filter:retweets»,count: 100)
Остальная и большая часть Лекции 10 целиком теоретическая и посвящена одной единственной теме — Core Data. По существу, это способ создания графа объектов, который проектируется на SQL или XML базы данных  или даже на базу данных в памяти.
В iOS 10 Apple представила одну из самых значительных модернизаций Core Data со времен iOS 5. Во главе нового Core Data теперь стоит класс NSPersistenceContainer.  Он снабжает вас очень простым  API: контекстом viewContext, работающим на main queue, и методом  performBackgroundTask(_:) , для выполнения Core Data задач в фоновом (background) режиме.

Читать далее

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительный пункт 6. UICollectionView с расположением ячеек типа WaterFall и переключение между Layouts.

Класс UICollectionView отличается UITableView наличием свойства UICollectionViewLayout, которое отвечает за расположение (layout) ячеек в двухмерным пространстве, не заботясь о содержимом этих ячеек. По умолчанию работает расположение (layout)  UICollectionViewFlowLayout, которое действует наподобие размещения текста по строкам слева направо с переносом на другую строку. Именно этот layout мы использовали при выполнении дополнительного пункта 6 Задания 4. Но есть очень привлекательное расположение ячеек, которое организует их по столбцам таким образом, чтобы они как можно плотнее заполняли все пространство. Это так называемый стиль Pinterest или еще его называют «анти-Тэтрис» или Waterfall (водопад). Выше на рисунке цифрами показан порядок заполнения ячеек в случае обычного Flow и Waterfall расположения ячеек, и мы видим, что последний уплотняет расположение ячеек, давая снизу появиться новым ячейкам.
Алгоритм расположение очень прост: каждая следующая ячейка располагается в столбце, наименее занятом по вертикали,  c соответствующим Aspect ratio.  Класс CHTCollectionViewWaterfallLayout, реализующий этот алгоритм расположения ячеек в Collection View представлен в Github. Давайте попробуем использовать его в решении Задания 4.

Код находится на Github.

Читать далее

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительный пункт 6. UICollectionView и перемещение ячеек.

Содержание

Текст Домашнего Задания 4 на английском языке доступен на  iTunes в пункте “Programming: Project 4: Smashtag Mentions″На русском языке вы можете скачать здесь:

Задание 4 iOS 10.pdf

iOS 10 Задания


В Задании 4 вы должны усовершенствовать приложение Smashtag, которое мы создали на Лекции 9, чтобы обеспечить быстрый доступ к хэштэгам hashtags, URLs urls, изображениям images и пользователям users, упомянутым в твите. Основными идеями в этом Задании являются многопоточность, работа с таблицей Table View, глубокое знание Navigation Controller, множественные MVC типа Tab Bar Controller и работа с изображениями с помощью Scroll View.

Основой для решения Задания 4 является демонстрационный пример «Smashtag L9«, код которого доступен как на  iTunes название “Lecture 9 Demo Code: Smashtag«, так и на Github.

В данном посте представлено решение Дополнительного пункта 6 Задания 4. Код можно найти на Github.

Начало решения Задания 4 находится в постах:

Задание 4 CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 1- 7.
Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 8 — 10.

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительные пункты 1-5.

Код для Обязательных пунктов 1- 7 находится на Github.
Код для Дополнительного пункта 6 находится на Github.

Пункт 6 дополнительный

Добавьте некоторый UI элемент, который показывает новый View Controller, отображающий UICollectionView всех первых изображений (image) (или, если хотите, всех images) во всех твитах, которые удовлетворяют условиям поиска.  Когда пользователь кликает на изображении (image) в этом UICollectionView, “переезжайте” (segue) на показ этого Tweet (даже если вы будете показывать один Tweet, вам все равно следует использовать ваш TweetTableViewController и тогда вам будет доступна функциональность “преследования mentions”).

Читать далее

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительные пункты 1-5.

Содержание

Текст Домашнего Задания 4 на английском языке доступен на  iTunes в пункте “Programming: Project 4: Smashtag Mentions″На русском языке вы можете скачать здесь:

Задание 4 iOS 10.pdf

iOS 10 Задания


В Задании 4 вы должны усовершенствовать приложение Smashtag, которое мы создали на Лекции 9, чтобы обеспечить быстрый доступ к хэштэгам hashtags, URLs urls, изображениям images и пользователям users, упомянутым в твите. Основными идеями в этом Задании являются многопоточность, работа с таблицей Table View, глубокое знание Navigation Controller, множественные MVC типа Tab Bar Controller и работа с изображениями с помощью Scroll View.

Основой для решения Задания 4 является демонстрационный пример «Smashtag L9«, код которого доступен как на  iTunes название “Lecture 9 Demo Code: Smashtag«, так и на Github.

В данном посте представлено решение Дополнительных пунктов 1 — 5 Задания 4. Код можно найти на Github.

Начало решения Задания 4 находится в постах:

Задание 4 CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 1- 7.
Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 8 — 10.

Код для Обязательных пунктов 1- 7 находится на Github.
Код для Обязательных пунктов 1- 10 находится на Github.
Код для Дополнительных пунктов 1- 5 находится на Github.

Пункт 1 дополнительный

В секции Users вашего нового UITableViewController представьте список не только пользователей, users, упомянутых в твите, но также и пользователей users, пославших твит в первое место.

Читать далее