15
Введение в Core Text

Введение в Core Text

Embed Size (px)

Citation preview

Page 1: Введение в Core Text

Введение в Core Text

Page 2: Введение в Core Text

Core Text API

•Mac OS X 10.5 •iOS 3.2

Page 3: Введение в Core Text

Зачем вообще это надо?

•Любые кастомные layouts •Полный контроль за отрисовкой текста

•Доступ к элементарным частям и управление ими

Page 4: Введение в Core Text

Glyph

• 1 символ - 1 глиф (a, b, c…)

• 1 символ - N глифов (FunCity)

• N символов - 1 глиф (emoji)

Page 5: Введение в Core Text

Glyph

• Глиф - единица графики

• Символ - единица текста

Page 6: Введение в Core Text

Glyph Metrics• Ascent

• Descent

• Leading

Page 7: Введение в Core Text

Контекст Core Text• CoreText обычно в паре с CoreGraphics

• Определяем drawRect:….

• Начало координат - слева внизу

• Контекст надо флипать перед отрисовкой CGContextScaleCTM, CGContextTranslateCTM

Page 8: Введение в Core Text

Основные абстракции

CTFramesetter, CTFrame, CTTypesetter

Page 9: Введение в Core Text

CTFramesetter

• Создает объекты для отрисовки

• Расчитывает размеры текста

Page 10: Введение в Core Text

CTFrame

• Область текста в заданной CGPath - прямоугольник, эллипс, etc

• Фрейм можно отрисовать в CG контексте

Page 11: Введение в Core Text

CTTypesetter

• Определяет как будет выглядеть CTFrame

• Алгоритмы переносов, алгоритмы вписывания в CGPath

Page 12: Введение в Core Text

Остальные примитивы

• CTLine - как ни странно строка текста, можно рендерить в контекст отдельно

• CTRun - самый мелкий примитив, набор символов с одинаковым стилем

Page 13: Введение в Core Text

Форматирование текста

• NSAttributedString - основа всего (CFAttributedString)

• Можно миксовать шрифты, цвета, кегль, baseline, linespacing, etc

• Все параметры задаются через dictionary (toll-free bridging)

Page 14: Введение в Core Text

Бонус!

Page 15: Введение в Core Text

CTRunDelegate• Набор callback’ов для отображения конкретного CTRun

• Можно оставлять места под элементы, которые будут отрендерены позднее (CoreGraphics, UIKit, etc) - кастомные глифы

• Задается с помощью того же attributes dictionary в NSAttributedString