苹果对于开发,确实在细节方面下了非常大的功夫,只是不管一个平台下多大的功夫,仍然会有些需求是无法涵盖的。比方字体吧。

我们的应用为了能更加个性化。会须要不同的字体。有时候有些字体是非常特殊的。甚至是购买的。那么这些字体怎样加到项目中去呢?

字体有对应的字体文件。通常是以ttf或者otf为后缀,我们能够去一些第三方站点去下载(也有人专门做了字体出售),Google Fonts是个比較好的站点,能够去找找看。我们就用Open Sans这个字体来做样例吧。

首先当然是去下载字体文件,下载后发现是10个ttf文件,没错,这是一个系列的字体,有粗体,有斜体。还有不同的大小,方便用户在不同的场景下使用。

在准备好了字库文件后,就能够加到项目中了,是把ttf文件增加到项目中,这里须要注意的是要把这些ttf增加到bundle中。也就是说,最后的ipa文件里必须包括有这些ttf(否则应用中到哪里去找字库呢?)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2FrdWxhZmx5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

在增加后,我们能够分别在FileExplore和Build Phase里面看到这些内容,例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2FrdWxhZmx5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

设置到这里还有最后一步。就是在info.plist文件里增加对应信息,这一步实际上实在项目的Info页里面增加Fonts provided by application项,并设置对应的ttf文件进去,这样就告诉了应用,我要增加新的字体了,对应的字体文件是哪些。

到这里,字库文件应该是准备好了,以下我们须要确认一下字库的名字,由于代码中须要用名字来指定字体。通常来说。这个名字和文件名称是同样的,但也有不同的时候。所以这一步一定不要忽略。

字库的名字这里是通过NSLog这个打印语句来获得,我们看一下代码:

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

这段代码我们逐个读入字体族的名字,然后每一个族中读取每种字体的名字。

从代码中我们能够知道。实际上我们打印了所有的字体。所有列出实在太长了,所以截了一部分列出来。我们的Open Sans也在当中。

我们看一下,里面有些字体名字和文件名称同样,如OpenSans-Bold;有些字体名字和文件名称不同,如OpenSansLight-Italic。

至此,准备工作最终所有完毕了。

准备工作相当的繁琐,每一步都不能省,但以下正式使用就很easy了,我做了三个label,分别放入了三种字体,为了向大师致敬。都显示Hello World!的字样。

代码是这种:

    self.label1.font = [UIFont fontWithName:@"OpenSans-Bold" size:20.0];
self.label1.text = @"Hello World!";
self.label2.font = [UIFont fontWithName:@"OpenSans-BoldITalic" size:20.0];
self.label2.text = @"Hello World!";
self.label3.font = [UIFont fontWithName:@"OpenSans-Light" size:20.0];
self.label3.text = @"Hello World!";

效果是这种:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2FrdWxhZmx5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

这样,我们就在应用中完美的增加了自己定义字库。应用会显得更加的个性化。让人眼前一亮,脱颖而出!

最新文章

  1. 【JavaScript】 Webpack安装及文件打包
  2. PHP中的Memcache详解
  3. SQL中的连接查询及其优化原则
  4. cURL 学习笔记与总结(1)概念
  5. HTML5之 Microdata微数据
  6. 《玩转shutdown》-linux命令五分钟系列之十三
  7. 在Windows的Wamp环境下安装Composer
  8. 1625: [Usaco2007 Dec]宝石手镯
  9. SoapUI中读取法文字符
  10. bzoj 3242: [Noi2013]快餐店
  11. 一篇文章带你学会Linux三剑客之一:awk
  12. Goroutine通信与thread in java间的通信
  13. java.sql.SQLException: Column count doesn't match value count at row 1 解决办法
  14. 将ubuntu14.04 从mysql从5.5删除之后安装5.7遇到的一些问题(本篇不讨论热升级)
  15. 自学Aruba4.1-Aruba开机初始化
  16. Node.js 搭建HTTP服务器,提供文件下载
  17. Mysql 多字段去重
  18. Only the original thread that created a view hierarchy can touch its views解决办法
  19. Ethereum 源码分析之 accounts
  20. Ensemble_learning 集成学习算法 stacking 算法

热门文章

  1. POJ1323-Game Prediction
  2. 服务器搭建纪录linux+mysql+nginx+php
  3. PHP开发APP接口
  4. ZOJ 3209 Treasure Map 精确覆盖
  5. php mvc 框架演示
  6. iOS开发中,应用内直接跳转到Appstore
  7. Lua环境配置 windows + VS
  8. cocos2d-x 3.0 新特性样例
  9. MVC5.0 中如何提高Controller 的优先级
  10. SqlServer 2015修改表时出现“save changes is not permitted…”的解决方法