Лекция 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 позволяют представить рисование как увлекательный и очень интеллектуальный процесс.

В теоретической части рассматривается иерархичность viewssuperviewsubviews и связанные с ними системы координат, способы инициализации views в зависимости от того, где они создаются: в коде или на storyboard, «ранняя» установка некоторых свойств в методе awakeFromNib.

 views используют специальные структуры данных для рисования: числа с плавающей точкой CGFloat, точку CGPoint, размер CGSize и прямоугольник CGRect, а также множество удобных методов для работы с ними. Дается четкое различие между frame и bounds. Вводится понятие единицы измерения points с различным числом пикселей в зависимости от используемого устройства и соответствующее свойство contentScaleFactor.

Представлена подробная концепция рисование в draw (_rect:) с использованием Core Graphics и UIBezierPath. Рассказывается обо всем: рисование фигур, «вырезание» по UIBezierPath траектории с использованием addClip(), управление цветами с помощью класса UIColor, управление прозрачностью  с помощью значения alpha, «cкрытие» view, не убирая его из иерархии.
Рассматриваются трудности использования класса NSAttributedString в Swift для «рисования» текстов в draw (_rect:), но в Swift 4 появился «волшебный» инициализатор NSRange, который берет диапазон Range<String.Index> из Мира Swift и преобразует его в диапазон NSRange из Мира Objective-C, с которым оперирует NSAttributedString. Теперь легко  делать строки с атрибутами из строк, содержащих эмоджи и другие Unicodes символы. 

Правильное использование шрифтов preferredFont (forTextStyle:) для пользовательского контента увеличивает привлекательность вашего приложения. На основе режима «перерисовки» сontentMode определяется, что будет происходить при изменении границ  bounds вашего view. Дается представление о кривых Безье и показано их использование для построения сложных траекторий.
В конце лекции профессор начинает большой демонстрационный пример — пользовательское рисование игральной карты PlayingCard, который распространится и на Лекцию 6. На Лекции 5 демонстрируется лишь создание Модели MVC, который рисует игральную карту P
layingCard. Модель состоит из самой игральной карты PlayingCard и колоды игральных карт PlayingCardDeck, при этом очень интенсивно используются перечисления enum с ассоциированными значениями.

Код демонстрационного примера для Лекции 5 находится на Github  для iOS 11  и на Github для iOS 12 в папке PlayingCard L5.

Лекция 5 и слайды на английском языке находятся на  iTunes название “5. Drawing in iOS.”

Русскоязычный неавторизованный конспект Лекции 5, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также в формате Google Doc доступны на платной основе.

Лекция 5 CS193P Fall 2017 — Рисование в iOS.: 6 комментариев

  1. Сильно ли отличаются лекции по 11 ios от 10? Начал изучать по старым вашим лекциям.Приобрел старый пакет лекций.И теперь не знаю ждать новые или проходить по старым.

    • Отличаются очень сильно, мало что общего за исключением многопоточности, «жизненных циклов» View Controller и Apps, множественных MVC: курс по iOS 10 — классика, и там очень подробно рассказывается о том, что нужно в первую очередь: Table View, Core Data, Core Motion. Курс iOS 11, с одной стороны, в начальной своей части напоминает курс iOS 7 и Objective-C: те же демонстрационные примеры и Задания на проектирование игры Set, и это хорошо, если вдруг вы решите ознакомится с Objective-C. А с другой стороны, во второй своей части курс iOS 11 основан на совершенно новых технологиях : Drag&Drop и приложения, основанные на Documents, там Table View заменен на Collection View, нет совсем Core Data, а постоянное хранение заменено хранением документов.
      Я бы все таки предпочла начать с курса iOS 10, хотя начальная часть курса (Лекции 1-6) с точки зрения навыков работы со Swift очень сильная и в iOS 10 (Калькулятор с перечислениями enum), и в iOS 11 (Карточные игры с протоколами Equatable и Hashable).
      Дальше — на любителя. Мне, например, нравится в iOS 10 демонстрационный пример «клиент Twitter».
      Так что, если есть время, изучайте оба курса, материал пересекается слабо в практической области.

      • спасибо за такой подробный ответ! сажусь изучать дабы почерпать новое.отдельное спасибо за перевод!

      • Я заканчиваю лекцию 6 курса IOS11, мне лучше продолжать изучение этого курса или переходить на IOS10 курс ? Я понимал что отличие есть, но чтобы прям настолько… =(

        • Я бы советовала вам продолжить изучение курса iOS 11, а затем, если захотите, вернуться к отдельным частям курса iOS 10, например, к начальной его части в виде Калькулятора, на котором хорошо можно отработать навыки программирования перечислений enum. Многопоточность представлена в курсах iOS 10 и iOS 11 практически одинаково. Таблицы Table View прекрасно изложены в курсе iOS 10 на примере приложения Smashtag (Клиент Twitter), но в iOS 11 фреймворк Social, на котором профессор построил свой фреймворк Twitter, упразднен и уже не актуален, так что прийдется пройти через непростую процедуру адаптации Twitter Kit, изложенную в статье в статье http://bestkora.com/IosDeveloper/obnovlenie-demonstratsionnyh-primerov-i-reshenij-zadanij-kursa-ios-10-swift-3-do-swift-4-i-ios-11/.
          Ну и так далее…

Обсуждение закрыто.