1. 动态下载系统提供的中文字体

  • 为了实现更好的字体效果,在应用中加入字体包问题:
  1. 字体文件比较大,会造成应用体积剧增
  2. 中文字体通常都是有版权的
  • 动态下载中文字体的API可以动态的向iOS系统中添加字体文件,这些字体文件都是下载到系统的目录中,所以不会造成应用体积增加,字体文件下载后还可以在所有应用间共享。并且字体文件是iOS系统提供的,也免去了字体使用版权的问题

  • 下载的时候需要使用的名字是 PostScript 名称,所以你要动态下载相应的字体的话,还需要使用 Mac 内自带的应用 “字体册 “来获得相应字体的 PostScript 名称。如下显示了从” 字体册 “中获取字体的 PostScript 名称的截图

  • 苹果提供的动态下载代码的 Demo 工程 链接在这里。将此 Demo 工程下载下来,即可学习相应 API 的使用

// 1. 先判断该字体是否已经被下载下来了
- (BOOL)isFontDownloaded:(NSString *)fontName {UIFont* aFont = [UIFont fontWithName:fontName size:12.0];if (aFont && ([aFont.fontName compare:fontName] == NSOrderedSame || [aFont.familyName compare:fontName] == NSOrderedSame)) {return YES;} else {return NO;}
}// 2. 如果该字体下载过了,则可以直接使用。否则需要先准备下载字体 API 需要的一些参数
// 用字体的 PostScript 名字创建一个 Dictionary
NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObjectsAndKeys:fontName, kCTFontNameAttribute, nil];
// 创建一个字体描述对象 CTFontDescriptorRef
CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs);
// 将字体描述对象放到一个 NSMutableArray 中
NSMutableArray *descs = [NSMutableArray arrayWithCapacity:0];
[descs addObject:(__bridge id)desc];
CFRelease(desc);// 3. 准备好上面的descs变量后,则可以进行字体的下载了
__block BOOL errorDuringDownload = NO;
CTFontDescriptorMatchFontDescriptorsWithProgressHandler((CFArrayRef)descs, NULL, ^bool(CTFontDescriptorMatchingState state, CFDictionaryRef  _Nonnull progressParameter){double progressValue = [[(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingPercentage] doubleValue];if (state == kCTFontDescriptorMatchingDidBegin) {NSLog(@" 字体已经匹配 ");} else if (state == kCTFontDescriptorMatchingDidFinish) {    if (!errorDuringDownload) {NSLog(@" 字体 %@ 下载完成 ", fontName);}} else if (state == kCTFontDescriptorMatchingWillBeginDownloading) {NSLog(@" 字体开始下载 ");} else if (state == kCTFontDescriptorMatchingDidFinishDownloading) {NSLog(@" 字体下载完成 ");dispatch_async( dispatch_get_main_queue(), ^ {// 可以在这里修改 UI 控件的字体// self.label.font = [UIFont fontWithName:fontName size:12];});} else if (state == kCTFontDescriptorMatchingDownloading) {NSLog(@" 下载进度 %.0f%%", progressValue);} else if (state == kCTFontDescriptorMatchingDidFailWithError) {NSError *error = [(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingError];if (error != nil) {_errorMessage = [error description];} else {_errorMessage = @"ERROR MESSAGE IS NOT AVAILABLE!";}// 设置标志errorDuringDownload = YES;NSLog(@" 下载错误: %@", _errorMessage);}return YES;
});

2. 导入TTF字体文件使用自定义字体

  • 下载字体导入工程(注意上文说的字体版权问题
  • 在 info.plist文件中告诉系统你想导入的字体文件
  • 设置字体到相应控件上(使用的字体名字是 PostScript 名称,上文已说过怎样获取 PostScript 名称)
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 300, 400)];
label.text = @"汉体书写信息技术标准相容档案下载使用界面简单";
label.numberOfLines = 0;
UIFont *font = [UIFont fontWithName:@"FZLTXHK--GBK1-0" size:40];
[self.view addSubview:label];

附:我的博客地址

iOS 使用自定义字体相关推荐

  1. iOS UIFont自定义字体

    1. 将字体文件导入工程(.ttf) 2. 打开Build Phases -> Copy Bundle Resources,确定字体文件已经添加 3. 编辑info.plist文件,添加Font ...

  2. iOS - 使用自定义字体-苹方字体

    苹方提供了六个字重,font-family 定义如下: 苹方-简 常规体 font-family: PingFangSC-Regular, sans-serif; 苹方-简 极细体 font-fami ...

  3. 小程序安卓和ios使用自定义字体,解决安卓不生效问题

    官网介绍 官网文件的loadFontFace也可以实现自定义字体引入和使用,如果需要在app.js使用记得加上global:true,不然app.js不会执行 背景:项目中要把所有字体改为宋体,这里我 ...

  4. iOS 使用自定义字体

    现在的 APP 都极具个性与风格特点,APP界面中的文字自然也需要各种变化和改变,但是iOS 官方的字体并不能满足所有需求,下面我们就来看看如何在 iOS 的项目中使用自定义字体. iOS 系统字体可 ...

  5. iOS 导入自定义字体不生效

    自定义字体的使用 首先把字体文件导入到项目 在info.plist中添加Fonts provided by application,对应的value就是包含你自定义字体的数组 接下来看下是否添加成功 ...

  6. iOS使用自定义字体并找到字体真实名称

    在最近的一个项目开发中,UI设计师使用了一种Xcode里没有的自定义字体,然后需要在项目中使用自定义字体,下面就开始介绍一下在项目中使用自定义字体并找到该字体真实可在项目中使用的名字. 1.导入字体文 ...

  7. iOS使用自定义字体(添加字体包)

    转载请注明出处!!! 首先是最简单也普遍的做法,打包内置字符库文件: 步骤如下: 1.第一步找到你想用的字体的 ttf 格式.加入到你的工程的resouce目录下. 2.在工程的plist中AddRo ...

  8. iOS使用自定义字体

    添加自定义字体的方法 要添加方正兰亭字体,首先需要一个ttf的字体库. 然后把这个文件添加到工程里面 在plist里面添加 添加成功后,就可以使用啦.但是我只拿到这个库,并不清楚fontname.用下 ...

  9. ios设置中性黑体_ios 解决自定义字体无法显示问题

    现在的项目中都会使用自定义字体,而iOS9其中的一项新特性就是用新的「苹方」字体替代了已经使用了几年的「华文黑体」,所以现在记录一下iOS如何导入并在项目中使用苹方字体的使用. 1. 下载一个 .tf ...

  10. ios 自定义字体_如何仅用几行代码在iOS应用中创建一致的自定义字体

    ios 自定义字体 by Yuichi Fujiki 藤木雄一 In this article, you'll learn how to create a unified custom look th ...

最新文章

  1. 微软批量授权版WINDOWS 10资料(截至到2015年11月,此处无下载地址)
  2. linux 565显示格式,RGB565转BMP格式 C语言程序
  3. 如何使用 python 减少 kaggle Mushroom Classification 数据集中的特性数量?
  4. Linux网络——一种强制门户技术
  5. Java并行计算线程池_干货!线程池+CountDownLatch,实现 多线程并发计算、汇总
  6. Ansible Privilege Escalation
  7. 使用jQuery写一个简单的轮播图(笔记)
  8. 数论基础(浅谈数论的部分实现)
  9. 2019泰迪杯C题案例分析-python大数据自动化数据挖掘
  10. Java判断手机号格式是否正确
  11. python量化交易策略实例_Python写一个量化股票提醒系统实例
  12. 考研 数学1 2 3 区别
  13. 消失的阅读量:你家公众号还能活多久?
  14. CAD如何输入指定角度的直线、AUTOCAD——渐变填充
  15. NoSql入门和概述
  16. 【Python爬虫学习】一、Request
  17. JavaScript的ES6、ES7、ES8、ES9、ES10新特性
  18. 把英文单词转换成ASCII画
  19. 每日一道算法题:高楼扔鸡蛋问题(动态规划问题)
  20. ad 2008文件服务器搭建教程,Windows Server 2016 AD服务器搭建的步骤(图文)

热门文章

  1. 单片机蜂鸣器唱歌c语言程序,STC89C52单片机蜂鸣器唱歌实验
  2. 三大运营商发5G白皮书:传统短信迎大升级 推出5G消息
  3. android自定义pickerview,一个非常好用的Android PickerView库
  4. android自定义TextView字体
  5. Logisim元件用法详解一:Wiring 线
  6. 网络安全实验室CTF—基础关 writeup
  7. 视频教程-WPF MVVM 编程模式/框架 基础+提高 项目开发实战视频教程-.NET
  8. Python 之 异常检测/异常点搜索
  9. 易班显示服务器错误,易班常见问题汇总
  10. 优课计算机考试,新生入学安全教育考试之优课操作流程