Objective c 在mac软件包中嵌入字体

Objective c 在mac软件包中嵌入字体,objective-c,cocoa,xcode,fonts,nsview,Objective C,Cocoa,Xcode,Fonts,Nsview,我正在写一个程序。我想用一种别致的字体。我可以将我的字体嵌入到我的包中并从那里使用它吗 我的代码 NSMutableAttributedString *recOf; recOf = [[NSMutableAttributedString alloc] initWithString:@"In Recognition of"]; length = [recOf length]; [recOf addAttribute:NSFontAttributeName value:[NSFont fontWit

我正在写一个程序。我想用一种别致的字体。我可以将我的字体嵌入到我的包中并从那里使用它吗

我的代码

NSMutableAttributedString *recOf;
recOf = [[NSMutableAttributedString alloc] initWithString:@"In Recognition of"];
length = [recOf length];
[recOf addAttribute:NSFontAttributeName value:[NSFont fontWithName:@"Edwardian Script ITC" size:50] range:NSMakeRange(0, length)];
[[NSColor blackColor] set];
p.x = (bounds.size.width/2)- (([recOf size].width)/2);
p.y = (bounds.size.height/1.7);
[recOf drawAtPoint:p];
[recOf  release];
使用碳魔法。你应该试试看


关于上面的示例,Leopard中不推荐使用ATSFontActivateFromFileSpecification。显然,替代品直接使用FSRef,这甚至更好。

是的,你可以。您应该向目标添加
复制文件
构建阶段(右键单击目标,然后选择添加>新建构建阶段>新建复制文件构建阶段

将复制文件生成阶段的目标设置为资源,路径为
字体
。这将确保将字体复制到应用程序包中名为
font
的文件夹中

通过将字体文件拖动到构建阶段,将字体文件添加到新构建阶段

然后,您需要将添加到
Info.plist
文件中,并将包含字体的文件夹名称作为其值:

<key>ATSApplicationFontsPath</key>
<string>Fonts</string>
ATSApplicationFontsPath
字体
然后,您可以通过调用
[NSFont-fontWithName:@“yourFontName”]
将应用程序中的字体当作内置系统字体使用


当然,在执行此操作之前,您应该确保您有权分发字体。

替换为
ATSFontActivateFromFileReference
。然而,整个API()在Snow Leopard中被弃用,取而代之的是核心文本。替换项的替换项是
CTFontManagerCreateFontDescriptorsFromURL
:这也更易于使用,因为核心文本类与它们的AppKit对等项免费桥接。感谢您发布此问题!我在想怎么做,罗布·凯尼格的回答很有魅力。你真的应该将他的答案标记为已接受的答案。对于xCode 5,你必须选择你的目标,从菜单栏选择编辑器->添加构建阶段->添加复制文件构建阶段,以添加构建阶段。你能帮我解决同样的问题吗,@Rob:这非常有效。谢谢你。但是如果用户没有在他的mac上安装字体呢?意味着我们可以从应用程序中检查字体是否安装在mac上。如果没有,那么我们可以从cocoa mac应用程序以编程方式安装它吗?将字体嵌入应用程序包的整个要点是,您可以加载并使用它,而无需用户安装它。当然,这意味着您只能在应用程序中使用字体。检查字体是否已经安装在系统上会更加复杂。要安装它,您可能只需使用
NSWorkspace
打开字体文件,它将在具有安装按钮的font Book应用程序中打开。