Лекция 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 (экстренные уведомления) and 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).

Читать далее

Задание 5 cs193p Winter 2017 Smashtag Mentions Popularity. Решение дополнительного пункта 3 (удаление старой информации из Core Data).

Содержание

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

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

Начало решения Задания 5 — все обязательные и дополнительные пункты, кроме 3-го дополнительного пункта — находятся в посте «Задание 5 cs193p Winter 2017 Smashtag Mentions Popularity (клиент Twitter). Решение.«.

В данном посте мы рассмотрим особенности решения дополнительного пункта 3 Задания 5, считая, что все предыдущие обязательные и дополнительные пункты уже выполнены.

Код для Задания 5 без дополнительного пункта 3 находится на Github.
Код для полного Задания 5 (включая дополнительный пункт 3) находится на Github.

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

Вам не требуется нигде что-либо уничтожать из базы данных, тем не менее, нам необходима информация лишь о наиболее поздних поисках в Twitter, так что со временем у нас напрасно занимается большой объем дискового пространства. Заставьте ваше приложение удалять из базы данных объекты, которые больше не представляют интереса (то есть доступ к этим данным не будет осуществляться в вашем UI) с тем, чтобы поддерживать регулируемый размер базы данных. Вы должны самостоятельно решить, когда наступает подходящее время для удаления уже неиспользуемых данных. 

Читать далее

Задание 5 cs193p Winter 2017 Smashtag Mentions Popularity (клиент Twitter). Решение.

Содержание

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

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

В Задании 5 вы должны еще больше усовершенствовать приложение Smashtag в плане проведения некоторого анализа всех меншенов, полученных в результате поиска в Twitter. Для этого нужно использовать Core Data.

 Основными идеями в этом Задании являются получение действующих на различных потоках контекстов NSManagedObjectContext, концептуальное и физическое конструирование схемы базы данных в Xcode, применение различных запросов NSFetchRequest c использованием небольшого встроенного языка для форматирования строк, а также различных дескрипторов сортировки. Необходимо свободно пользоваться классом NSFetchedResultsController или усовершенствованным на его основе классом FetchedResultsTableViewController и расширением extension, созданным Полом Хэгерти специально для этого курса.

Для выполнения Задания 5 нужно посмотреть видео и текстовые материалы Лекции 10 и Лекции 11.
Основой для решения Задания 5 является демонстрационный пример «L11 Smashtag«, код которого доступен как на  iTunes название “Lecture 11 Demo Code: Smashtag«, так и на Github

Код моего решения Задания 5 находится на Github.

Решение дополнительного пункта  3 будет размещено позже.

Будем следовать порядку разработки демонстрационного приложения профессором Полом Хэгерти на Лекции 11.

Cначала я хочу напомнить в общих чертах о приложении Smashtag, на основании которого мы будем выполнять наше Задание 5.

Приложение Smashtag позволяет получить выборку твитов, удовлетворяющих поисковой строке, которую пользователь может задать произвольным образом. Каждый выбранный твит Tweet содержит text, пользователя user, то есть кто твитит, дату создания created, уникальный идентификатор identifier, изображения media, которые подсоединены к твиту, хэштэги hashtags, URLs urls и упомянутые в твите пользователи userMentions:

Пользователь задает поисковую строку в виде тэга, в нашем случае #autumn, и получает список твитов, которые содержат этот тэг. Вы можете посмотреть каждый отдельный твит на другом экранном фрагменте, который отображает в виде таблицы с различными секциями все его меншены Mentionshashtags urls, userMentions и images:

screen-shot-2016-10-22-at-9-13-16-am

Приложение Smashtag позволяет также посмотреть все изображения в выбранных твитах, а также запомнить строку поиска в NSUserDefauls, чтобы при повторном запуске приложения иметь возможность повторить выборку твитов по старым поисковым строкам.

screen-shot-2016-10-22-at-9-20-06-am

Задание 5 состоит в том, чтобы наделить маленькую кнопочку с буквой i в кружочке на правом экране следующей функциональностью. Если я нажимаю на эту кнопку, то должны быть показаны все меншены с пользователями (users) и хэштегами (hashtags) во всех твитах, когда-либо выбранных с использованием поисковой строки, для которой мы нажимали кнопку в буквой i в кружочке. Предполагается, что меншены должны быть уникальны и нечувствительны к регистру. Сортировка должна проводится по количеству твитов, в которых этот меншен упоминался, причем наиболее популярные меншены должны располагаться в самом верху. Я сразу покажу готовый результат, чтобы вы понимали поставленную перед нами задачу в Задании 5.

Читать далее

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

Читать далее