在iOS开发中使用自定义字体
在iOS的项目开发中经常遇到需要使用一些自定义的字体文件,之前我们为了使用这些自定义的字体,在应用的资源包中放入这些字体文件。
因为字体文件通常比较大,这样打包后的ipa文件的体积就可能会变得很大,对于只有个别的模块需要特殊的字体样式的应用来说很不划算,那么在iOS6.0以后苹果就开放了动态加载字体的权限。下面就iOS中使用字体的这两种方式进行介绍。
使用静态字体
将字体文件拷贝到项目工程中
在 Info.plist
文件中添加 Fonts provided by application
的配置项,其中每一个Item对应的是字体文件的名称,如 DS-DIGI.TTF
。
使用时直接按照如下方式即可:
_textLabel1.font = [UIFont fontWithName:@"DS-Digital" size:40];
效果如下:
其他说明:
+ (UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize;
这个方法中需要指定的fontName不是前面设置的字体文件的文件名,而应该是字体的名称,如何获取字体的名称可以通过如下方式:
打印出当前所有可用的字体,查找对应的字体名称
|
|
通过Mac自带的字体册查看字体的名称
直接双击字体即可打开字体册,如果系统没有安装该字体按照要求安装即可,然后可以在字体的详细信息中找到对应的字体的名称:
使用动态字体
动态下载自定义的字体
在网易新闻iOS客户端中可以使用自定义的字体,对于未下载的字体可先下载然后安装下次就能自动设置为该字体,效果如下:
下面就该功能简单介绍实现的步骤:
第一次进入该页面会自动到服务器上获取可使用的字体的列表,示例如下:
|
|
上面的内容指明了字体的名称,下载地址等信息,从上面的内容可以看出下载回来的字体文件是一个zip压缩包,再使用前还需要进行解压处理。
下载字体文件
|
|
解压zip压缩包
iOS中解压zip压缩文件非常方便,使用ZipArchive这个开源项目按照如下的方式即可快速解压zip文件
|
|
ZipArchive
项目地址:https://github.com/mattconnolly/ZipArchive
注册指定路径下的字体文件
下载回来的字体文件如果不做处理是不能直接使用的,使用前需要先注册然后才能使用,注册方式如下:
|
|
需要先引入 #import <CoreText/CoreText.h>
框架。
判断字体是否加载
在使用字体文件前最好是先判断字体是否已经被加载过了,判断方式如下:
|
|
其他说明
经测试注册过的字体在应用关闭后下次开启应用,判断字体是否加载时返回为NO,为了保证正常使用需要每次启动应用的时候先遍历一遍字体文件夹将里面的字体文件都再次注册一遍即可。参考代码如下:
|
|
动态下载苹果提供的字体
大多数的中文字体是有版权的,在应用中加入特殊中文字体还需要处理相应的版权问题。从iOS6开始,苹果就支持动态下载中文字体到系统中。
苹果支持下载的字体列表
- iOS6字体列表:http://support.apple.com/zh-cn/HT202599
- iOS7字体列表:http://support.apple.com/zh-cn/HT5878
官方提供的示例代码
https://developer.apple.com/library/ios/samplecode/DownloadFont/Introduction/Intro.html下载示例程序。
针对示例程序简单介绍如下:
判断字体是否已经被下载过
|
|
下载字体
根据字体的PostScript名称构建下载字体所需的参数:
|
|
下载字体文件:
|
|
说明
- 使用动态下载中文字体的API可以动态地向iOS系统中添加字体文件,这些字体文件都是下载到系统的目录中(目录是/private/var/mobile/Library/Assets/com_apple_MobileAsset_Font/),所以并不会造成应用体积的增加,而且可以在多个应用中共享。
- 如何获取字体的PostScript和FontName?可以通过Mac系统自带的字体册来查看。具体请参考前面的步骤。