Лекция 8. Анимация. Демонстрация. CS193P Spring 2021.

Это восьмая Лекция курса Stanford CS193p, весна 2021 года. Лекция 8 полностью посвящена демонстрации различных возможностей анимации в SwiftUI:

  • matchedGeometryEffect, который действует при сдаче карт
  • переворот карты, который осуществляется нашим специальным Animatable модификатором Cardify
  •  анимация нашей геометрической фигуры Shape в виде “пирога” Pie
  • неявная анимация, которая крутит эмодзи при совпадении карт
  • перетасовка карт и выбор карты представляют явную анимацию
  • запуск анимации при появлении (.onAppear) некоторых вещей
  • как задерживать анимацию карт при их сдаче
  • как диагностировать проблемы, когда у нас не происходит анимация, которую мы ожидаем при появлении на экране и уходе с экрана View, которое является частью условного предложения if-else

Читать далее

Лекция 7. Модификаторы ViewModifier. Анимация. CS193P Spring 2021.

Это седьмая Лекция курса Stanford CS193p, весна 2021 года. Лекция  7 и Лекция 8 полностью посвящены анимации. Мы собираемся выяснить, как она работает. По ходу дела нам придется изучить модификаторы ViewModifier, которые очень сильно вовлечены в процесс анимации.

Объясняется протокол ViewModifier, который затем используется для того, чтобы сделать возможным преобразование любого View в карту игры Memorize путем «картафикации» ( от слова «карта»). Затем лекция переходит к углубленному рассмотрению анимации и начинает комплексную многолекционную демонстрацию анимации. 

Если Лекция 8 — это, по существу, демо-Лекция, на которой профессор Пол Хэгерти демонстрирует все возможные анимации, какие только вы можете себе представить, то на Лекции 7 изложены теоретические основы анимации и представлено начало (неявная анимация, чтобы заставить смайлик на Memorize карте вращаться, когда она совпадает с другой картой, и модификаторы ViewModifier) той огромной демонстрации, которая последует на Лекции 8.

Прежде чем погрузиться в механизм анимации и действительно понять, как заставить  анимацию появиться на экране, профессор излагает основные принципы, золотые правила анимации.

Золотые правила анимации.

Только изменения могут анимироваться. Если ничего не изменяется, то ничего не будет анимироваться. Это фундаментальное правило.

 Какого рода изменения могут анимироваться?

Реально в SwiftUI, только 3 типа изменений:

  • аргументы модификаторов ViewModifiers,
  • геометрические фигуры Shapes, то есть аргументы при создании Shapes,
  • “появление” или «уход» Views на UI.

Необходимо понимать, что анимация показывает пользователю изменения, которые уже произошли. Ваш код не работает в темпе с анимацией. Ваш код  только вносит изменения в то, о чем мы упоминали выше. A затем система анимации показывает пользователю растянутые во времени изменения, которые уже были сделаны в вашем коде. Ваш код уже ушел с этого места. Это требует небольшой коррекции мышления, но если вы это поймете, то сможете вложить гораздо больше смысла в написание кода анимации, который будет правильно работать.

Модификаторы ViewModifiers — это основные “агенты изменений” в UI, но изменение аргументов ViewModifier должно произойти ПОСЛЕ того, как View разместился на UI. Другими словами, изменения аргументов модификаторов рассматриваются системой анимации только ПОСЛЕ момента присоединения View к  UI.

Читать далее

Лекция 6. Протоколы protocol. Геометрические фигуры Shape.CS193P Spring 2021.

Это шестая Лекция курса Stanford CS193p, весна 2021 года, и на этой лекции профессор рассматривает последний элемент списка разновидностей ТИПов Swift — протоколы protocol. Протоколы protocol, очень, очень важны в SwiftUI, кроме того, эта разновидность ТИПа Swift в наибольшей степени отличается от других языков, которые вы когда либо видели.

Надо сказать, что тема протоколов protocol в этой году представлена значительно шире и подробнее, чем когда-либо в стэнфордских курсах CS193P. Начиная от использования протоколов protocol в синтаксических конструкциях Swift и SwiftUI как ограничивающего «поведения» наподобие Identifiable, Hashable, Equatable, CustomStringConvertible и кончая возможностью совместного использования кода в расширениях extension протоколов protocol. К этому он добавляет «связку» protocolGenerics, которая является фундаментальной основой протокольно-ориентированного программирования. Профессор никогда не углублялся в эту тему, считая ее продвинутой в языке Swift, но на этой Лекции она представлена в полном объёме. Здесь также присутствует тема наследования протоколов” (protocol inheritance), не путать с наследованием классов (class inheritance), Self-ссылочные протоколы наподобие Equatable, View, которые не могут использоваться как нормальные ТИПы.

Читать далее