Лекция 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 в папке PlayingCard L5.

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

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *