Upload
oleg-poyaganov
View
76
Download
3
Embed Size (px)
Citation preview
Введение в Core Text
Core Text API
•Mac OS X 10.5 •iOS 3.2
Зачем вообще это надо?
•Любые кастомные layouts •Полный контроль за отрисовкой текста
•Доступ к элементарным частям и управление ими
Glyph
• 1 символ - 1 глиф (a, b, c…)
• 1 символ - N глифов (FunCity)
• N символов - 1 глиф (emoji)
Glyph
• Глиф - единица графики
• Символ - единица текста
Glyph Metrics• Ascent
• Descent
• Leading
Контекст Core Text• CoreText обычно в паре с CoreGraphics
• Определяем drawRect:….
• Начало координат - слева внизу
• Контекст надо флипать перед отрисовкой CGContextScaleCTM, CGContextTranslateCTM
Основные абстракции
CTFramesetter, CTFrame, CTTypesetter
CTFramesetter
• Создает объекты для отрисовки
• Расчитывает размеры текста
CTFrame
• Область текста в заданной CGPath - прямоугольник, эллипс, etc
• Фрейм можно отрисовать в CG контексте
CTTypesetter
• Определяет как будет выглядеть CTFrame
• Алгоритмы переносов, алгоритмы вписывания в CGPath
Остальные примитивы
• CTLine - как ни странно строка текста, можно рендерить в контекст отдельно
• CTRun - самый мелкий примитив, набор символов с одинаковым стилем
Форматирование текста
• NSAttributedString - основа всего (CFAttributedString)
• Можно миксовать шрифты, цвета, кегль, baseline, linespacing, etc
• Все параметры задаются через dictionary (toll-free bridging)
Бонус!
CTRunDelegate• Набор callback’ов для отображения конкретного CTRun
• Можно оставлять места под элементы, которые будут отрендерены позднее (CoreGraphics, UIKit, etc) - кастомные глифы
• Задается с помощью того же attributes dictionary в NSAttributedString