Пользовательский шрифт в приложении Какао
Я знаю, что вы можете настроить шрифты, используя Interface Builder и выбирая шрифт. Однако мне любопытно, могу ли я использовать собственный шрифт, который не включен по умолчанию в системах. Есть ли способ включить пользовательский шрифт в мое приложение?
4 ответа
Хотя процедура активации шрифта вручную является одним из вариантов, вы также можете рассмотреть ATSApplicationFontsPath
Ключ Info.plist:
Информация Список свойств Ключ Ссылка:
"
ATSApplicationFontsPath
(String
- Mac OS X) определяет местоположение файла шрифта или каталога шрифтов в комплектеResources
каталог. Если он есть, Mac OS X активирует шрифты по указанному пути для использования приложением в комплекте. Шрифты активируются только для прилагаемого приложения, а не для системы в целом. Сам путь должен быть указан как относительный каталог каталога ресурсов пакета. Например, если каталог путей был по пути/Applications/MyApp.app/Contents/Resources/Stuff/MyFonts/
, вы должны указать строкуStuff/MyFonts/
для значения этого ключа. "
Я бы обязательно перепроверил, но я полагаю, что эта функциональность была добавлена в OS X 10.5.x (которой предназначен код, размещенный Jinhyung Park).
ATSApplicationFontsPath использует путь [NSBundle mainbundle] в качестве базового пути, поэтому он не работает, когда папка Resources там не находится (например, для плагинов приложения).
В моем плагине Какао мне нужно загрузить пользовательские шрифты, используя CTFontManagerRegisterFontsForURL
#import <Cocoa/Cocoa.h>
static void FGDActivateFont(NSString *fontName)
{
// Can't make ATSApplicationFontsPath in Info.plist work for plugins (non-standard Resources path)
NSArray *availableFonts = [[NSFontManager sharedFontManager] availableFonts];
if (![availableFonts containsObject:fontName]) {
NSURL *fontURL = [[FGDRapidCart bundle] URLForResource:fontName withExtension:@"ttf" subdirectory:@"Fonts"];
assert(fontURL);
CFErrorRef error = NULL;
if (!CTFontManagerRegisterFontsForURL((__bridge CFURLRef)fontURL, kCTFontManagerScopeProcess, &error))
{
CFShow(error);
}
}
}
int main(int argc, char *argv[])
{
@autoreleasepool
{
FGDActivateFont(@“FontAwesome”);
}
return NSApplicationMain(argc, (const char **)argv);
}
Кредиты: https://github.com/OneSadCookie/Extendaword/blob/master/Extendaword/main.m
Вот пример загрузки пользовательских шрифтов в Mac App.
NSString *fontFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"/fonts"];
fontsURL = [NSURL fileURLWithPath:fontFilePath];
if(fontsURL != nil)
{
OSStatus status;
FSRef fsRef;
CFURLGetFSRef((CFURLRef)fontsURL, &fsRef);
status = ATSFontActivateFromFileReference(&fsRef, kATSFontContextLocal, kATSFontFormatUnspecified,
NULL, kATSOptionFlagsDefault, NULL);
if (status != noErr)
{
errorMessage = @"Failed to acivate fonts!";
goto error;
}
}
Мне удалось сделать это, используя cocos2d (CCLabelBMFont) и инструмент hiero. Вам нужно будет создать шрифт, используя hiero, и передать этот шрифт объекту CCLabelBMFont.