Core Text - это API в стиле Core Foundation в macOS , впервые представленный в Mac OS X 10.4 Tiger , опубликованный в Mac OS X 10.5 Leopard и представленный для iPad с iPhone SDK 3.2. Предоставляя C API , он заменяет возможности отрисовки текста в устаревших фреймворках QuickDraw и ATSUI в предыдущих версиях Mac OS X. Согласно Apple, Core Text «разработан для обеспечения высокой производительности и простоты использования», а его API разметки - «простой, согласованный и тесно интегрированный с Core Foundation, Core Graphics и Cocoa». [1]
Функции
Core Text предоставляет следующие непрозрачные типы:
- CTFramesetter - создает объекты CTFrame из заданного объекта строки с атрибутами и объекта CGPath с помощью CTTypesetter.
- CTTypesetter - выполняет разметку линий; например, разрыв строки
- CTFrame - представляет собой массив строк (т.е. объекты CTLine).
- CTLine - представляет собой массив пробегов глифов.
- CTRun - упорядоченный набор глифов с одним и тем же атрибутом.
- CTFont - представляет шрифт.
Пример
Следующий код отображает текст «Hello, World!» к заданному графическому контексту.
// Подготавливаем шрифт CTFontRef font = CTFontCreateWithName ( CFSTR ( "Times" ), 48 , NULL );// Создаем строку с атрибутами CFStringRef keys [] = { kCTFontAttributeName }; CFTypeRef values [] = { font }; CFDictionaryRef attr = CFDictionaryCreate ( NULL , ( const void ** ) & keys , ( const void ** ) & values , sizeof ( keys ) / sizeof ( keys [ 0 ]), & kCFTypeDictionaryKeyCallBacks , & kCFTypeDictionaryValueCallBacks ); CFAttributedStringRef attrString = CFAttributedStringCreate ( NULL , CFSTR ( «Привет, мир!» ), Attr ); CFRelease ( attr );// Рисуем строку CTLineRef line = CTLineCreateWithAttributedString ( attrString ); CGContextSetTextMatrix ( контекст , CGAffineTransformIdentity ); // Используйте это при использовании стандартных координат представления // CGContextSetTextMatrix (context, CGAffineTransformMakeScale (1.0, -1.0)); // Используйте это, если координаты представления переворачиваютсяCGContextSetTextPosition ( контекст , 10 , 20 ); CTLineDraw ( строка , контекст );// Очистить CFRelease ( line ); CFRelease ( attrString ); CFRelease ( шрифт );