В Snow Leopard загрузка произвольного шрифта осуществлялась установкой его в системную папку всех шрифтов. В Lion такое решение deprecated. Тем более с приходом песочницы в 10.8 установка или попытка лезть в систему будет жестко подавлена. Решение в использовании Core Text API.
Последовательность действий File -> CGFontRef -> CTFontRef -> NSFont
Такая схема не работает в SL, разумно использовать старый функционал с заглушками.
Пример загрузки кастомного шрифта из бандла программы.
Для начала, добавим в проект ApplicationServices.framework (уже по умолчанию содержит ссылку на CoreText.framework).
Последовательность действий File -> CGFontRef -> CTFontRef -> NSFont
Такая схема не работает в SL, разумно использовать старый функционал с заглушками.
Пример загрузки кастомного шрифта из бандла программы.
Для начала, добавим в проект ApplicationServices.framework (уже по умолчанию содержит ссылку на CoreText.framework).
- + (CTFontRef) fontFromBundle : (NSString*) fontName
- withHeight : (CGFloat) height
- {
- //
- NSString* fontPath = [[NSBundle mainBundle] pathForResource : fontName
- ofType : @"ttf" ];
- if (nil==fontPath)
- return NULL;
- CGDataProviderRef dataProvider =
- CGDataProviderCreateWithFilename ([fontPath UTF8String]);
- if (NULL==dataProvider)
- return NULL;
- //
- CGFontRef fontRef = CGFontCreateWithDataProvider ( dataProvider );
- if (NULL == fontRef)
- {
- CGDataProviderRelease (dataProvider);
- return NULL;
- }
- CTFontRef fontCore = CTFontCreateWithGraphicsFont (fontRef,height,NULL,NULL);
- CGDataProviderRelease (dataProvider);
- CGFontRelease (fontRef);
- return fontCore;
- }
Как использовать в коде.
- CTFontRef bundleFont = [CustomFonts fontFromBundle : @"MavenPro-Regular"
- withHeight : 25 ];
- NSFont* font = (NSFont*)bundleFont;
- ....
- // use font in application
- ....
- CFRelease(bundleFont);
На заметку.
CoreText можно использовать для рендера сложного текста в UI. В фрэймворке реализована полноценная поддержка Unicode. Поэтому можно использовать прозрачно CTFontRef вместо CGFontRef при рендере текста в Quartz 2D.