为IOS应用添加字体
引子
ios6中默认提供了大概200种字体,有时为了让应用中的文字更好看,希望能有其他的字体可以选择。今天主要来介绍一下如何为IOS应用添加字体。
方法一、将字体包打包到工程
步骤如下:
1.下载字体包
在网上搜索字体包,可以找到很多资源,我下载了一个名字叫 DIN-Medium.otf 的字体包。(有一些特殊的字体可能涉及到版权的问题,所以在使用之前要确认清楚。)
2.将字体包添加到工程
将字体包添加到工程
注:如果不选 Show Raw Keys/Values,需要添加的Key值为 Fonts provided by application
3.修改plist文件
在工程的plist文件中添加key值为UIAppFonts:
这样就可以使用我们新加的字体了。
效果图:
方法二、动态下载字体库
在IOS6之后,苹果支持动态字体库下载。这样的好处可以不必增加程序包大小,不过下载的字体只能从官方支持的列表中选择:
具体实现方法可以看一看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效果图:
总结
将字体包打包到工程的方法
适用情况:字体包比较小
存在的问题:对字体包大小有限制;版权的问题
动态下载字体库的方法
适用场景:字体包比较大,无法打包到工程(一个完整的字体包要10M多);不用担心版权的问题。
字体会下载一个系统的路径/private/var/mobile/Library/Assets/com_apple_MobileAsset_Font/,一次下载,所有的App都能使用(在被系统删除之前)。
存在的问题:
- 需要预先下载10几M的字体包,对用户来说是一个负担
- 每次应用重新启动,即使已经下载,都需要“预热”一次。需要先到上面所说的下载路径进行匹配,检查是否已经下载;如果已经下载,就会将字体缓存到另外一个cache目录下,才能使用,这个过程需要3s左右的时间。(我试过手动删除下载的字体包,但不去改里面的XML文件,结果匹配出错返回错误结果,但是不再会重新下载)
- 可选择的字体有限制,只能从苹果提高的列表中选择
- 只支持IOS6以上(按照目前的统计来看,这个慢慢不是问题了)