В Лекции 15 освещаются 3 темы:
- Экстренные сообщения Alerts и списки действий Action Sheets
- Уведомления Notifications («радиостанции») и KVO
- “Жизненный цикл” приложения (UIApplication, AppDelegate, Info.plist, Capabilities)
В Лекции 15 освещаются 3 темы:
Лекция 14 состоит из двух неравных частей :
Лекция 13 состоит из двух неравных частей :
Демонстрационный пример заключается в следующем: в приложении Emoji Art, полученном в прошлый раз, создается текстовое поле, которое появляется прямо в нашей небольшой коллекции эмоджи UICollectionView, и с помощью этого текстового поля вы сможете добавлять новые эмоджи в эту коллекцию.
В этом Задании вы добавите анимацию в вашу игру Set и скомбинируете ваши 3 первых Задания в одно. Вам необходима реализация Заданий 1- 3. Начинаем выполнять с кода Задания 3.
Текст Домашнего задания на английском языке доступен на iTunes в пункте “Programming: Project 4: Animayed Set″. На русском языке вы можете скачать Задание 4 здесь:
Для решения Задания 4 необходимо ознакомиться с Лекциями 7 — 10.
Мое решение Задания 4 состоит из двух приложений: анимационной игры Set БЕЗ использования делегата UIDinamicAnimationDelegate динамического аниматора, которая находится в папке Set IV NoExtra, и анимационной игры Set с использованием делегата UIDinamicAnimationDelegate, которая находится в папке Set IV NoExtra Stasis.
Все это находится на Github для iOS 11 и на Github для iOS 12.
1. Ваше приложение должно продолжать играть в соло версию игры Set, как это требовалось в Задании 3 (с особенностями, указанными ниже).
2. Вы должны анимировать следующие действия в игре Set:
- Реорганизация карт. Если карты добавляются или исчезают из игры, то карты должны перемещаться плавно ( не прыгать мгновенно) на их новые позиции.
- Сдача новых карт. Это включает как сдачу начальных 12 карт, так и сдачу 3-х новых карт в любое время. Карты должны “лететь” через экран из некоторой “колоды”, расположенной где-то на экране. Внешний вид колоды полностью отдается на ваше усмотрение. Никакие две карты не должны сдаваться одновременно, хотя их анимации могут немного перекрываться.
- Обнаружение совпадения. Все «совпавшие» карты должны “улетать” с тех мест, где они находились одновременно и начать отскакивать от краев экрана в течение пары секунд прежде, чем собраться в некоторую “стопку сбрасывания”, где-то расположенную на экране. Внешний вид “стопки сбрасывания” полностью отдается на ваше усмотрение.
- Переворот карт. Карты сдаются “лицевой” стороной вниз до тех пор, пока не достигнут своего местоположения, затем они должны быть перевернуты для проявления содержимого карты игры Set. Для совпавших» карт после того, как они «улетели» в “стопку сбрасывания”, по крайней мере верхняя карта в этой “стопке сбрасывания” должна лежать “лицевой” стороной вниз.
3. Ваша реализация анимации должна использовать UIViewPropertyAnimator, UIDynamicAnimator и class метод transition(with:…) класса UIView. Возможно, вам понадобиться таймер Timer, но это не строго обязательно.
Если Лекция 11 представляет собой в основном теоретическую часть, то Лекция 12 является огромным демонстрационным примером, показывающим возможности механизма Drag & Drop, таблицы Table View и коллекции Collection View в действии. Лишь в самом конце Лекции 12 профессор рассматривает пока только теоретически текстовое поле UITextField, демонстрационный пример для которого по техническим причинам перенесен а Лекцию 13.
Центральной частью Лекции 12 является демонстрирование возможностей коллекции Collection View как двумерного средства размещения информации неограниченного объема с помощью пользовательских (Custom) элементов items, так и настройки коллекции Collection View на двустороннюю работу с механизмом Drag & Drop.
Если на Лекции 11 было показано, как подключить механизм Drop для обычного UIView, то на Лекции 12 все внимание уделено коллекции Collection View, с помощью которой можно не только создавать коллекцию эмоджи, но использовать их с помощью механизма Drag & Drop как для для создания живописных эмоджи шедевров, так и для поиска в Google, например, в другом приложении — Safari.
Профессор показывает, как работает механизм Drag & Drop в “Мире” коллекции Collection View, и это выглядит почти в точности, как и в “Мире” НЕ Collection View. Единственная разница между Drag в “Мире” и коллекции Collection View состоит в том, что Collection View помогает вам с indexPath элемента коллекции, который вы хотите перетаскивать Drag. Она знает, где находится ваш палец и интерпретирует это как indexPath элемента коллекции, который вы “перетаскиваете” в настоящий момент или как indexPath элемента коллекции, куда вы “бросаете”что-то в данный момент. Так что коллекции Collection View снабжает вас indexPath, а в остальном это абсолютно то же самое.
Лекция 11 посвящена двум темам: механизму Drag & Drop, который представляет собой способ разделения (sharing) информации между различными приложениями, а также таблице Table View и коллекции Collection View, которые обеспечивают отображение информации неограниченного объема.
Первая часть Лекции 11 посвящена механизму Drag & Drop. Этот механизм особенно важен в iOS 11, потому что в этой операционной системе у iPad есть прекрасные многозадачные возможности одновременного размещения на экране двух приложений, которые могут успешно использовать механизм Drag & Drop. При выполнении Drag&Drop механизм multi-touch (множества прикосновений) и multi-fingers (множество пальцев) позволяют достичь феноменального эффекта при взаимодействии с экраном. Вы можете находиться в середине процесса перетаскивания (Drag) и сказать: “Так, я хочу добавить еще некоторые вещи к этому перетаскиванию.” Для этого вам достаточно “тапнуть” на этих вещах, и они добавятся к вашему перетаскиванию (Drag) .
Цель этого задания — в получении опыта создания своих собственных пользовательских (custom) view, включая управление пользовательскими жестами. Начинаем выполнять с кода Задания 2.
Начните свой код с Задания 2.
Текст Домашнего задания на английском языке доступен на iTunes в пункте “Programming: Project 3:Graphical Set″. На русском языке вы можете скачать Задание 3 здесь:
Правила игры Set:
Для решения Задания 3 необходимо ознакомиться с Лекциями 6 — 8.
Мое решение Задания 3 состоит из основного приложения Set III NoExtra и вспомогательного SetCard для отдельной карты, они находятся на Github для iOS 11 и на Github для iOS 12.
1. Ваше приложение должно продолжать играть в соло версию игры Set, как это требовалось в Задании 2.
2. В этой версии не нужно ограничивать пользовательский интерфейс (UI) фиксированным числом карт. Вы всегда должны быть готовы к тому, что могут быть сданы еще 3 карты с помощью кнопки “Deal 3 More Cards”. Если карт в колоде больше не осталось, то кнопка “Deal 3 More Cards” исчезает.
3. Не “отводите заранее” место для максимально возможного количества карт — 81. В любое заданное время карты должны иметь настолько возможно большой размер, насколько это позволит отведенное для них место на экране и количество карт, находящихся в игре. Другими словами, когда игра начинается (только с 12 -ю картами), карты будут реально большими, но по мере все большего количества карт на экране (благодаря кнопке “Deal 3 More Cards”), они будут становиться все меньше и меньше для того, чтобы соответствовать размеру игрового поля.
4. В конце игры, когда обнаружены 3 совпавшие карты и больше нет Set карт в колоде, совпавшие карты должны быть полностью убраны и оставшиеся карты должны “пере-формироваться”, чтобы использовать освободившиеся покинувшими игру картами пространство экрана с экрана (то есть стать опять немного больше, если это позволит размер игровой области на экране).
Судя по названию, основными темами Лекции 10 являются:
но очень значительная часть Лекции 10 посвящена также усовершенствованию функциональных возможностей демонстрационного приложения Cassini по следующим направлениям :
В результате получился универсальный, подходящий на все случаи жизни, как в дальнейшем покажет практика, MVC для показа изображений по их URL — ImageViewController. Огромный объем изображений NASA, задействованных в демонстрационном приложении Cassini , наглядно показывает необходимость использования многопоточности.
Читать далее
В Лекции 9 рассматриваются две важных темы :
“Жизненный цикл” View Controller — это как View Controller рождается, живет, делает много интересных дел и затем умирает. Профессор подробно рассказывает нам о всех этапах жизни View Controller и о том, какие сообщения посылает ему система на протяжении его «жизненного цикла». Он начинает с момента создания View Controller, затем следует подготовка View Controller для того случая, когда к этому View Controller кто-то “переезжает” (segue). Следующий этап — установка ваших outlets, затем ваш View Controller появляется на экране и может исчезнуть, и может опять появиться, и опять исчезнуть. Затем его геометрия может быть изменена, например, при автоматическом вращении устройства.
Он не просто перечисляет такие методы «жизненного цикла» View Controller, как viewDidLoad, viewWillAppear, viewWillTransitionToSize и другие, но также очень подробно рассказывает о том, в каких ситуациях их нужно применять, а в каких воздержаться от их использования. Особое внимание уделяется тому, где следует стартовать такие затратные по времени задачи, как загрузка изображения из интернета.
Сделав небольшой обзор различных типов анимации в iOS на прошлой Лекции 7, в Лекции 8 профессор фокусируется на 3-х механизмах анимации views (UIViews):