使用系统提供的中文字体,既可避免版权问题,又可以减小应用体积

  1. #pragma mark - 判断字体是否已经被下载
  2. - (BOOL)isFontDownLoaded:(NSString *)fontName{
  3. UIFont *font = [UIFont fontWithName:fontName size:12.0];
  4. if (font && [font.fontName compare:fontName] == NSOrderedSame) {
  5. return YES;
  6. }
  7. else{
  8. return NO;
  9. }
  10. }
  11.  
  12. #pragma mark -
  13.  
  14. - (void)downLoadFont{
  15.  
  16. //如果字体已经被下载过了,则可以直接使用,否则我们需要先准备下载字体API需要的一些参数
  17. NSString *fontName = @"FZLTTHK-GBK1.0";
  18.  
  19. //用自体的名字创建一个Dictionary
  20. NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObjectsAndKeys:fontName,kCTFontNameAttribute, nil];
  21.  
  22. //创建一个字体描述对象CTFontDescriptorRef
  23. CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs);
  24.  
  25. //将字体描述对象放到一个NSMutableArray中
  26. NSMutableArray *descs = [NSMutableArray arrayWithCapacity:];
  27. [descs addObject:(__bridge id)desc];
  28. CFRelease(desc);
  29.  
  30. //字体下载
  31. __block BOOL errorDuringDownLoad = NO;
  32.  
  33. CTFontDescriptorMatchFontDescriptorsWithProgressHandler((__bridge CFArrayRef)descs, NULL, ^bool(CTFontDescriptorMatchingState state, CFDictionaryRef _Nonnull progressParameter) {
  34.  
  35. double progress = [[(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingPercentage] doubleValue];
  36.  
  37. switch (state) {
  38. case kCTFontDescriptorMatchingDidBegin:
  39. {
  40. NSLog(@"字体已经匹配");
  41. }
  42. break;
  43. case kCTFontDescriptorMatchingDidFinish:
  44. {
  45. if (!errorDuringDownLoad) {
  46.  
  47. NSLog(@"字体:%@下载完成",fontName);
  48. }
  49. }
  50. break;
  51. case kCTFontDescriptorMatchingWillBeginQuerying:
  52. {
  53.  
  54. }
  55. break;
  56. case kCTFontDescriptorMatchingStalled:
  57. {
  58.  
  59. }
  60. break;
  61. case kCTFontDescriptorMatchingWillBeginDownloading:
  62. {
  63. NSLog(@"字体开始下载");
  64. }
  65. case kCTFontDescriptorMatchingDownloading:
  66. {
  67. NSLog(@"下载进度:%2f%%",progress);
  68. }
  69. break;
  70. case kCTFontDescriptorMatchingDidFinishDownloading:
  71. {
  72. NSLog(@"字体下载完成");
  73. dispatch_async(dispatch_get_main_queue(), ^{
  74.  
  75. //可以在这里修改UI控件的字体
  76. });
  77. }
  78. break;
  79. case kCTFontDescriptorMatchingDidMatch:
  80. {
  81.  
  82. }
  83. break;
  84. case kCTFontDescriptorMatchingDidFailWithError:
  85. {
  86.  
  87. errorDuringDownLoad = YES;
  88.  
  89. NSError *error = [(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingError];
  90. if (error == nil) {
  91.  
  92. NSLog(@"%@",[error description]);
  93. }
  94. else{
  95. NSLog(@"ERROR MESSAGE IS NOT AVAILABLE!");
  96. }
  97. }
  98. break;
  99. default:
  100. break;
  101. }
  102.  
  103. return YES;
  104. });
  105.  
  106. }

在下载完成后开始使用字体,一般将使用字体的代码放在 kCTFontDescriptorMatchingDidFinishDownloading 这个判断条件中。

字体下载完成后修改UI有两种方式:

  1.用GCD来修改

  2.可以发送通知来通知相应的Controller

iOS 动态下载系统提供的中文字体的更多相关文章

  1. UIFontDownLoad ----动态下载系统提供的字体

    程序运行结果如下 : 当点击对应单元格实现下载对应的字体. 控制台打印结果如下 : 2015-10-05 11:14:04.132 UIFontDownLoad[12721:86827] state ...

  2. 【读书笔记】iOS-UIFont-动态下载系统提供的多种中文字体网址

    苹果可使用的字体列表: https://support.apple.com/zh-cn/HT202599 动态下载字体的代码demo: https://developer.apple.com/libr ...

  3. 【读书笔记】iOS-UIFont-动态下载系统提供的字体-官方代码

    一,工程目录 二,AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOption ...

  4. centos 系统字体库安装中文字体

    一,centos系统默认不支持中文字体的,需要手动安装windows系统中的中文字体库到centos中. 首先,将windows系统中的字体拷贝出来: windows:打开C:\Windows\Fon ...

  5. Arch-Linux-添加中文字体

    代码下载: Arch-Linux-添加中文字体.txt

  6. [Xcode 实际操作]九、实用进阶-(2)遍历设备(输出系统)上的所有字体

    目录:[Swift]Xcode实际操作 在实际工作中,经常需要调整界面元素的字体种类. 本文将演示输出系统提供的所有字体,方便检索和使用. 在项目导航区,打开视图控制器的代码文件[ViewContro ...

  7. 解决CentOS无法显示中文字体 | 系统运维 | Web2.0

    解决CentOS无法显示中文字体 | 系统运维 | Web2.0 About Me    博客园    devops    前端    张家港水蜜桃 傍晚好! 2013年09月12日 17:56:08 ...

  8. iOS系统提供开发环境下命令行编译工具:xcodebuild

    iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...

  9. ubuntu14.04恢复系统默认中文字体

    今天 Ubuntu14.04已发布就进行了更新,在配置过程中,无意安装了某些中文字体,导致系统的中文字体极其难看,根据网上说的修改配置文件和tweak 修改的方法都不能解决,最终找到的解决办法(htt ...

随机推荐

  1. UAC在注册表中的对应位置

    UAC在注册表中的对应位置 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System 相关键值设置: U ...

  2. Redux教程3:添加倒计时

    前面的教程里面,我们搭建了一个简单红绿灯示例,通过在console输出当面的倒计时时间:由于界面上不能显示倒计时,用户体验并不良好,本节我们就添加一个简单的倒计时改善一下. 作为本系列的最后一篇文章, ...

  3. Bootstrap <基础十八>面包屑导航(Breadcrumbs)

    面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...

  4. Bootstrap <基础七>按钮

    任何带有 class .btn 的元素都会继承圆角灰色按钮的默认外观.但是 Bootstrap 提供了一些选项来定义按钮的样式,具体如下表所示: 以下样式可用于<a>, <butto ...

  5. AOP基础—代理模式

    代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代 ...

  6. codeblocks个性化配置

    1.general setting设置默认字体大小设置控制台字体大小:"Settings -> Environment -> View -> Message logs' f ...

  7. android学习之RadioButton和CheckBox

    移通152 余继彪 RadioBuuton是一个单选按钮,CheckBox是一个复选按钮 . RadioButton的使用 ,首先要将RadioButton放在RadioGroup中,RadioGro ...

  8. Plupload上传组件 + javaweb实现上传源码以及DEMO

    Plupload 是一个Web浏览器上的界面友好的文件上传模块,可显示上传进度.图像自动缩略和上传分块.可同时上传多个文件: 上网找了很多Plupload的DEMO都无法正常使用, 而且Pluploa ...

  9. ctags and vim

    1,源码目录下第归检索. ctags -R * 2,搜索tag并用vim打开: vim -t <tag> 3,在vim 下的一些操作: Keyboard command Action Ct ...

  10. hashmap 读取

    hashTable hashSet 都差不多 以hashmap为例,底层是一个散列表 数组,然后数组存出一个entry对象,对象中有两个泛型属性,一个可以指向自身类型的引用,这样就可以在每一个数组的位 ...