Пользовательский шрифт в приложении Какао - PullRequest
27 голосов
/ 12 марта 2011

Я знаю, что вы можете настроить шрифты, используя Interface Builder и выбирая шрифт.Однако мне любопытно, могу ли я использовать собственный шрифт, который не включен по умолчанию в системах.Есть ли способ включить пользовательский шрифт в мое приложение?

Ответы [ 4 ]

46 голосов
/ 12 марта 2011

Хотя процедура активации шрифта вручную является одним из вариантов, вы можете также рассмотреть ключ ATSApplicationFontsPath Info.plist:

Справка по ключу списка свойств информации :

"ATSApplicationFontsPath (String - Mac OS X) идентифицирует расположение файла шрифта или каталога шрифтов в каталоге Resources пакета. Если он есть, Mac OS X активирует шрифты по указанному пути для использованиясвязанным приложением. Шрифты активируются только для связанного приложения, но не для системы в целом. Сам путь должен быть указан как относительный каталог каталога ресурсов комплекта. Например, если каталог шрифтов был впуть /Applications/MyApp.app/Contents/Resources/Stuff/MyFonts/, вы должны указать строку Stuff/MyFonts/ для значения этого ключа. "

Я бы обязательно перепроверил, но я считаю, что эта функциональность была добавлена ​​в OS X10.5.x (на который нацелен код, опубликованный Jinhyung Park).

3 голосов
/ 12 декабря 2014

ATSApplicationFontsPath использует путь [NSBundle mainbundle] в качестве базового пути, поэтому он не работает, когда папка ресурсов там не находится (например, для плагинов приложений).

В моем плагине Какао мне нужно загрузить пользовательские шрифты, используя 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

3 голосов
/ 12 марта 2011

Вот пример для загрузки пользовательских шрифтов в 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;
    }
}
0 голосов
/ 12 марта 2011

Мне удалось сделать это с помощью cocos2d (CCLabelBMFont) и инструмента hiero. Вам нужно будет создать шрифт, используя hiero, и передать этот шрифт объекту CCLabelBMFont.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...