我知道您可以使用Interface Builder自定义字体并选择字体。但是,我很好奇我是否可以使用系统上默认不包含的自定义字体。有没有办法在我的应用程序中包含自定义字体?
答案 0 :(得分:46)
虽然手动字体激活程序是一个选项,但您也可以考虑ATSApplicationFontsPath
Info.plist键:
Information Property List Key Reference:
“
ATSApplicationFontsPath
(String
- Mac OS X)识别a的位置 字体文件或字体目录 bundle的Resources
目录。如果 目前,Mac OS X激活字体 在指定的路径上供使用 捆绑应用程序。字体是 仅为捆绑激活 应用程序,而不是系统 整个。路径本身应该是 指定为的相对目录 bundle的Resources目录。对于 例如,如果是字体目录 在路上/Applications/MyApp.app/Contents/Resources/Stuff/MyFonts/
, 你应该指定字符串Stuff/MyFonts/
代表这个价值 键“。
我一定会仔细检查一下,但我相信这个功能是在OS X 10.5.x中添加的(Jinhyung Park发布的代码是目标)。
答案 1 :(得分:3)
以下是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;
}
}
答案 2 :(得分:3)
ATSApplicationFontsPath使用[NSBundle mainbundle]路径作为基本路径,因此当Resources文件夹不在那里时它不起作用(例如,对于app插件)。
在我的Cocoa插件中,我需要使用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 :(得分:-6)
我已经设法使用cocos2d(CCLabelBMFont)和hiero工具完成了这项工作。您需要使用hiero创建字体,并将此字体提供给CCLabelBMFont对象。