Основной текст
Эта статья нуждается в дополнительных цитатах для проверки . ( сентябрь 2007 г. ) |
Core Text — это Core Foundation в стиле API в 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!» к данному графическому контексту в Objective-C .
// Prepare font
CTFontRef font = CTFontCreateWithName(CFSTR("Times"), 48, NULL);
// Create an attributed string
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("Hello, World!"), attr);
CFRelease(attr);
// Draw the string
CTLineRef line = CTLineCreateWithAttributedString(attrString);
CGContextSetTextMatrix(context, CGAffineTransformIdentity); //Use this one when using standard view coordinates
//CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, -1.0)); //Use this one if the view's coordinates are flipped
CGContextSetTextPosition(context, 10, 20);
CTLineDraw(line, context);
// Clean up
CFRelease(line);
CFRelease(attrString);
CFRelease(font);