我可以在iPhone应用程序中嵌入自定义字体吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以在iPhone应用程序中嵌入自定义字体吗?相关的知识,希望对你有一定的参考价值。

这个问题涉及ios 3.2之前的版本。从3.2开始,使用下面的samvermette答案很容易实现这个功能,我已经改变了接受的答案(从命令到samvermette)以反映这一点。我不能赞同这两个答案(除了upvotes),但它们都很好。

我想有一个应用程序包括一个自定义字体用于渲染文本,加载它,然后使用它与标准的UIKit元素,如UILabel。这可能吗?

我在下面找到了链接:

但是这些要求我自己渲染每个字形,这有点太辛苦了,特别是对于多行文本。

我也发现帖子直截了当地表示这是不可能的,但没有理由,所以我正在寻找一个确定的答案。


编辑 - 失败的-[UIFont fontWithName:size:]实验

我下载了Harrowprint.tff(从here下载)并将其添加到我的Resources目录和项目中。然后我尝试了这段代码:

UIFont* font = [UIFont fontWithName:@"Harrowprint" size:20];

导致抛出异常。查看Finder中的TTF文件,确认字体名称为Harrowprint。


编辑 - 到目前为止已经有很多回复告诉我阅读关于X或Y的文档。我已经对所有这些进行了广泛的实验并且无处可去。在一个案例中,X结果仅与OS X相关,而不是在iPhone上。因此,我正在为这个问题设置一个赏金,我将奖励给第一个提供答案的人(仅使用文档化的API),他们会回答足够的信息以使其在设备上运行。在模拟器上工作也是一个奖励。


编辑 - 似乎赏金自动奖励得票最多的答案。有趣。实际上没有人提供解决问题的答案 - 涉及编码自己的UILabel子类的解决方案不支持自动换行,这对我来说是一个必不可少的功能 - 尽管我想我可以扩展它来做到这一点。

答案

iOS 3.2及更高版本支持此功能。直接来自iPhone OS 3.2 doc中的新功能:

自定义字体支持 想要使用自定义字体的应用程序现在可以在其应用程序包中包含这些字体,并通过在其Info.plist文件中包含UIAppFonts键来向系统注册这些字体。此键的值是一个字符串数组,用于标识应用程序包中的字体文件。当系统看到密钥时,它会加载指定的字体并使其可供应用程序使用。

Info.plist中设置字体后,您可以将自定义字体用作IB中的任何其他字体或以编程方式使用。

Apple Developer论坛上有一个持续的主题: https://devforums.apple.com/thread/37824(需要登录)

这是一个非常简单的3步教程,介绍如何实现这一目标(删除断开的链接)

  1. 使用Xcode作为资源将自定义字体文件添加到项目中
  2. Info.plist文件中添加一个名为UIAppFonts的密钥。
  3. 将此键设为数组
  4. 对于您拥有的每种字体,请输入字体文件的全名(包括扩展名)作为UIAppFonts数组的项目
  5. 保存Info.plist
  6. 现在在您的应用程序中,您只需调用[UIFont fontWithName:@"CustomFontName" size:12]即可获得与UILabels和UITextViews等一起使用的自定义字体...

另外:确保字体在Copy Bundle Resources中。

另一答案

这是一步一步说明如何做到这一点。无需额外的库或任何特殊编码。

http://shang-liang.com/blog/custom-fonts-in-ios4/

大多数情况下,问题在于字体而不是方法。最好的方法是使用肯定会起作用的字体,如verdana或geogia。然后更改为预期的字体。如果它不起作用,可能是字体名称不正确,或者字体不是格式良好的字体。

另一答案

在现有iOS应用程序上添加新字体非常容易。

你只需要添加字体,例如font.ttf进入资源文件夹。

打开你的应用程序info.plist。将新行添加为“由应用程序提供的字体”,并将字体名称键入为font.ttf。

设置字体时,请执行setFont:"corresponding Font Name"

你可以通过NSArray *check = [UIFont familyNames];检查你的字体是否被添加。

它返回应用程序支持的所有字体。

另一答案

我建议按照我最喜欢的简短教程之一:http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/从中获取此信息。

第1步 - 将您的.ttf或.otf从Finder拖到您的项目中

注意 - 确保单击主应用程序目标上的“添加到目标”框

Drag font files into your project and click to add them to your target

如果您忘记单击将其添加到目标,然后单击项目层次结构中的字体文件,并在右侧面板上单击目标成员资格部分中的主应用程序目标

how to add fonts to app target if you forgot

要确保您的字体是应用程序目标的一部分,请确保它们显示在Build Phases中的Copy Bundle Resources中

how to check resources to see if fonts are part of app target

第2步 - 将字体文件名添加到Plist

转到信息部分中的自定义iOS目标属性,并为该部分中名为Fonts provided by application的项添加一个键(您应该看到它在您键入时作为选项出现,它将自己设置为数组。单击小箭头打开数组项并输入您添加的.ttf或.otf文件的名称,让您的应用知道这些是您想要的字体文件

注意 - 如果您的应用程序在此步骤后立即崩溃,请检查您在此处添加的项目的拼写

example plist with custom fonts added

第3步 - 找出字体的名称,以便您可以调用它们

通常,应用程序看到的字体名称与您认为基于该字体的文件名的字体名称不同,将其放在代码中并查看应用程序生成的日志,以查看代码中要调用的字体名称

迅速

for family: String in UIFont.familyNames(){
  print("(family)")
  for names: String in UIFont.fontNamesForFamilyName(family){
      print("== (names)")
  }
}

目标C.

for (NSString* family in [UIFont familyNames]){
    NSLog(@"%@", family);
    for (NSString* name in [UIFont fontNamesForFamilyName: family]){
        NSLog(@"  %@", name);
    }
}

您的日志应如下所示:

Example of searching log to find font names

第4步 - 使用步骤3中的名称使用新的自定义字体

迅速

 label.font = UIFont(name: "SourceSansPro-Regular", size: 18)

目标C.

 label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];
另一答案

在finder中找到TTF并“获取信息”。在“全名:”标题下,它给了我一个名字,然后我与fontWithName一起使用(我只是复制并粘贴了确切的名称,在这种情况下,不需要'.ttf'扩展名)。

另一答案

它尚未推出,但下一版本的cocos2d(2d游戏框架)将支持可变长度位图字体作为字符映射。

http://code.google.com/p/cocos2d-iphone/issues/detail?id=317

作者没有确定此版本的发布日期,但我确实看到一个帖子表明它将在下个月或两个月内发布。

另一答案

一个重要的注意事项:您应该使用与字体关联的“PostScript名称”,而不是其全名或系列名称。此名称通常可以与字体的常规名称不同。

另一答案

也许作者忘了给字体一个Mac FOND name

  1. FontForge中打开字体,然后转到Element> Font Info
  2. 有一个“Mac”选项,您可以在其中设置FOND名称。
  3. 在“文件”>“导出字体”下,您可以创建新的ttf

您也可以尝试在导出对话框中输入“Apple”选项。

免责声明:我不是iPhone开发人员!

另一答案

我一直在iOS 3.1.2上尝试这个页面上的各种建议,这些是我的结论:

即使使用FontForge设置FOND名称,只需将[UIFont fontWithName:size:]与Resources目录中的字体一起使用也行不通。

如果首先使用GSFontAddFromFile加载字体,[UIFont fontWithName:size:]将起作用。但是GSFontAddFromFile不是iOS 3.1.2的一部分,所以它必须按照@rpetrich的描述动态加载。

另一答案

按照这一步

1)在项目中复制字体

2)在源代码模式下打开你的.plist文件...(注意 - 不要打开info.plist

3)在此之前 - 右键单击​​你的字体并在fontforge或类似的编辑器中打开它,并在你的系统中打开install它应该是install

4)键入此

 <key>UIAppFonts</key>
<array>
    <string>MyriadPro.otf</string>
</array>

5)在class .m中输入此代码

 [lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];

这里lblPoints将会改变你的UILabel

完成!如果您的字体仍无效,请先检查字体兼容性

另一答案

查找ATSApplicationFontsPath

一个简单的plist条目,允许您将字体文件包含在应用程序资源文件夹中,并且它们在您的应用程序中“正常工作”。

另一答案

编辑:从iOS 3.2开始,此功能是内置的。如果您需要支持3.2之前的版本,您仍然可以使用此解决方案。

我创建了一个简单的模块,扩展UILabel并处理加载.ttf文件。我在Apache许可下发布了opensource,并把它放在github Here.

重要文件是FontLabel.hFontLabel.m

它使用了Genericrich's answer的一些代码。

浏览源Here.

要么

  • 将您的字体文件复制到资源中
  • 在您的Info.plist文件中添加一个名为UIAppFonts的密钥。 (“申请提供的字体)
  • 将此键设为数组
  • 对于您拥有的每种字体,请输入字体文件的全名(包括扩展名)作为UIAppFonts数组的项目
  • 保存Info.plist
  • 现在在您的应用程序中,您只需调用[UIFont fontWithName:@"CustomFontName" size:15]即可获得与UILabelsUITextViews等一起使用的自定义字体...

For More Information

另一答案

我已将此页面上的一些建议合并到iOS 5上适合我的内容中。

首先,您必须将自定义字体添加到项目中。然后,您需要遵循@iPhoneDev的建议并将字体添加到info.plist文件中。

完成后,这有效:

UIFont *yourCustomFont = [UIF

以上是关于我可以在iPhone应用程序中嵌入自定义字体吗?的主要内容,如果未能解决你的问题,请参考以下文章

带字体手提箱的iPhone自定义字体

我可以在包中嵌入自定义字体并从 ios 框架访问它吗?

iPhone中的自定义字体

如何在 iPhone SDK 中使用自定义字体? [复制]

我们如何在 iOS 应用中使用自定义字体? [复制]

iPad/iPhone 的自定义弹出框