为IOS应用添加字体

引子

ios6中默认提供了大概200种字体,有时为了让应用中的文字更好看,希望能有其他的字体可以选择。今天主要来介绍一下如何为IOS应用添加字体。

方法一、将字体包打包到工程

步骤如下:

1.下载字体包

在网上搜索字体包,可以找到很多资源,我下载了一个名字叫 DIN-Medium.otf 的字体包。(有一些特殊的字体可能涉及到版权的问题,所以在使用之前要确认清楚。)

2.将字体包添加到工程

将字体包添加到工程

添加字体包

注:如果不选 Show Raw Keys/Values,需要添加的Key值为 Fonts provided by application

3.修改plist文件

在工程的plist文件中添加key值为UIAppFonts:

添加键值

这样就可以使用我们新加的字体了。

使用新增字体

效果图:

效果图

方法二、动态下载字体库

在IOS6之后,苹果支持动态字体库下载。这样的好处可以不必增加程序包大小,不过下载的字体只能从官方支持的列表中选择:

iOS 6: Font list

iOS 7: Font list

苹果提供的Demo

具体实现方法可以看一看Demo。

在Readme中有一句很奇怪的话:

Fonts downloaded from applications in this manner are not installed permanently. 
The system may decide to remove them under certain usage scenarios.

按照Readme中的说法,系统可能会删除我们下载的字体,所以在每次程序启动前都需要检查一遍,使用的时候要确定字体已经可以使用。

什么场景下会删除?Readme中并没有详细说。

Demo效果图:

Demo效果图

总结

将字体包打包到工程的方法

适用情况:字体包比较小

存在的问题:对字体包大小有限制;版权的问题

动态下载字体库的方法

适用场景:字体包比较大,无法打包到工程(一个完整的字体包要10M多);不用担心版权的问题。

字体会下载一个系统的路径/private/var/mobile/Library/Assets/com_apple_MobileAsset_Font/,一次下载,所有的App都能使用(在被系统删除之前)。

存在的问题:

  1. 需要预先下载10几M的字体包,对用户来说是一个负担
  2. 每次应用重新启动,即使已经下载,都需要“预热”一次。需要先到上面所说的下载路径进行匹配,检查是否已经下载;如果已经下载,就会将字体缓存到另外一个cache目录下,才能使用,这个过程需要3s左右的时间。(我试过手动删除下载的字体包,但不去改里面的XML文件,结果匹配出错返回错误结果,但是不再会重新下载)
  3. 可选择的字体有限制,只能从苹果提高的列表中选择
  4. 只支持IOS6以上(按照目前的统计来看,这个慢慢不是问题了)