使用 iPhone 上没有的字体

Posted

技术标签:

【中文标题】使用 iPhone 上没有的字体【英文标题】:Using fonts that aren't on iPhone 【发布时间】:2010-11-02 20:32:53 【问题描述】:

我想使用一些不属于 iPhone 操作系统的字体。我见过使用非标准字体的游戏。我可以安装字体,在 Photoshop 中为每个字体创建图像,然后在 iPhone 应用程序中使用这些图像。但是,我认为这不是一个实用的方法。如果需要调整颜色或色调(由于背景)或大小,我将不得不重新设计我正在使用的每种字体。有没有更好的方法来做到这一点?

我阅读了这个Can I embed a custom font in an iPhone application? 并下载了开源字体标签应用程序。但是,当我尝试使用特定字体时,它大部分时间都会崩溃。关于最后一条关于使用带有 fontWithName:size 的 UIFont 的评论,那肯定是行不通的。您的字体变量将为零。列出所有可用字体揭示了原因 - 列表中没有任何自定义字体。

我也读过How do I include a font with my iPhone application?,这绝对行不通。与上面链接中的最后一条评论相同。

【问题讨论】:

很多游戏都使用自己的字体渲染。 你需要OpenGL字体渲染吗?或者您想在典型的 Cocoa-Touch 应用程序中使用自定义字体? 【参考方案1】:

正确答案是使用 FontLabel,可以在 GitHub 上找到。 http://github.com/zynga/FontLabel

我在几个实际项目中使用过该代码,这绝对是太棒了。

更新:

ios 3.2(仅限 iPad)和 iPhone 上的 iOS 4 开始,您可以将 TTF 字体打包到您的应用程序包中。使用 UIAppFonts 键将它们输入您的 Info.plist 后。

这里的三步说明: http://kgriff.posterous.com/45359635

【讨论】:

正如@David Dunham 所说,游戏通常使用不同类型的字体渲染,称为位图字体渲染。它实际上显示的是图像中的坐标,而不是基于数学的向量,并且仅限于图像中指定的大小。【参考方案2】:

解决方案是在 info.plist 文件中添加一个新属性“应用程序提供的字体”。

然后,您可以像使用普通 UIFont 一样使用自定义字体。

【讨论】:

【参考方案3】:

这其实很简单。

您将 ttf 包含在应用程序包中。您将 Fonts provided by application / UIAppFonts 键添加到您的应用程序,这是您包含的字体的文件名数组(包括扩展名),例如:

您可以使用UIFont 轻松使用该字体:

self.label.font = [UIFont fontWithName:@"Wingdings" size:23.0f];

这适用于从 3.2 开始的所有 iOS 版本,包括从 iOS 4 开始的 iPhone。

【讨论】:

【参考方案4】:

遗憾的是,这不是一个直接的答案,但似乎在未来,您将能够将自定义字体作为您的应用程序的一部分:

UIAppFonts (Array - iPhone OS) 指定应通过正常机制提供的任何应用程序提供的字体。数组中的每个项目都是一个字符串,其中包含位于应用程序包中的字体文件(包括文件扩展名)的名称。系统加载指定的字体并在应用程序运行时使它们可供应用程序使用。

不幸的是,这仅适用于 iPhone OS 3.2,这是 iPad 特定的版本。此功能似乎很有可能在未来的 iPhone OS 版本中可用。

链接:http://developer.apple.com/iPhone/library/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW18

(这是我在 Apple 网站上能找到的唯一公开文档)

【讨论】:

以上是关于使用 iPhone 上没有的字体的主要内容,如果未能解决你的问题,请参考以下文章

qt 怎么让程序自带字体,就是说在操作系统上没有的字体

iPhone系统字体

iPhone 6 Plus 支持字体问题

iPhone中的自定义字体

如何使用情节提要为不同的 iPhone 屏幕尺寸设置不同的字体尺寸?

字体无法缩放或适用于 iPhone 6 和 6+