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

#pragma mark - 判断字体是否已经被下载
- (BOOL)isFontDownLoaded:(NSString *)fontName{
UIFont *font = [UIFont fontWithName:fontName size:12.0];
if (font && [font.fontName compare:fontName] == NSOrderedSame) {
return YES;
}
else{
return NO;
}
} #pragma mark - - (void)downLoadFont{ //如果字体已经被下载过了,则可以直接使用,否则我们需要先准备下载字体API需要的一些参数
NSString *fontName = @"FZLTTHK-GBK1.0"; //用自体的名字创建一个Dictionary
NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObjectsAndKeys:fontName,kCTFontNameAttribute, nil]; //创建一个字体描述对象CTFontDescriptorRef
CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs); //将字体描述对象放到一个NSMutableArray中
NSMutableArray *descs = [NSMutableArray arrayWithCapacity:];
[descs addObject:(__bridge id)desc];
CFRelease(desc); //字体下载
__block BOOL errorDuringDownLoad = NO; CTFontDescriptorMatchFontDescriptorsWithProgressHandler((__bridge CFArrayRef)descs, NULL, ^bool(CTFontDescriptorMatchingState state, CFDictionaryRef _Nonnull progressParameter) { double progress = [[(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingPercentage] doubleValue]; switch (state) {
case kCTFontDescriptorMatchingDidBegin:
{
NSLog(@"字体已经匹配");
}
break;
case kCTFontDescriptorMatchingDidFinish:
{
if (!errorDuringDownLoad) { NSLog(@"字体:%@下载完成",fontName);
}
}
break;
case kCTFontDescriptorMatchingWillBeginQuerying:
{ }
break;
case kCTFontDescriptorMatchingStalled:
{ }
break;
case kCTFontDescriptorMatchingWillBeginDownloading:
{
NSLog(@"字体开始下载");
}
case kCTFontDescriptorMatchingDownloading:
{
NSLog(@"下载进度:%2f%%",progress);
}
break;
case kCTFontDescriptorMatchingDidFinishDownloading:
{
NSLog(@"字体下载完成");
dispatch_async(dispatch_get_main_queue(), ^{ //可以在这里修改UI控件的字体
});
}
break;
case kCTFontDescriptorMatchingDidMatch:
{ }
break;
case kCTFontDescriptorMatchingDidFailWithError:
{ errorDuringDownLoad = YES; NSError *error = [(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingError];
if (error == nil) { NSLog(@"%@",[error description]);
}
else{
NSLog(@"ERROR MESSAGE IS NOT AVAILABLE!");
}
}
break;
default:
break;
} return YES;
}); }

在下载完成后开始使用字体,一般将使用字体的代码放在 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. 驱动插ring3线程执行代码

    近日有在写一个小东西 需要在内核态中运行一个WIN32程序 之前提到的插入APC可以满足部分要求 但是一到WIN7 x86平台下就崩溃了WIN7下只能插入第三方的进程 一插入系统进程就崩溃,但是这样满 ...

  2. (DFS、全排列)POJ-2718 Smallest Difference

    题目地址 简要题意: 给若干组数字,每组数据是递增的在0--9之间的数,且每组数的个数不确定.对于每组数,输出由这些数组成的两个数的差的绝对值最小是多少(每个数出现且只出现一次). 思路分析: 对于n ...

  3. dede日期时间标签调用大全

    dedecms最强大的功能就是调用标签,可以变换出各种样式的文章形式出来,本节将DEDECMS调用时间的样式做一个总结,基本所有的时间调用样式都有了,日期时间格式 (利用strftime()函数格式化 ...

  4. Coding源码学习第四部分(Masonry介绍与使用(三))

    接上篇继续进行Masonry 的学习. (12)tableViewCell 布局 #import "TableViewController.h" #import "Tes ...

  5. php 常用数组操作

    php常用的数组操作函数,包括数组的赋值.拆分.合并.计算.添加.删除.查询.判断.排序等 array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 <?p ...

  6. MySQL workbench 中文乱码 显示口口

    Edit-->perference...-->Apperance  如下图 即可 转载自:http://blog.csdn.net/shxluwei/article/details/802 ...

  7. hibernate中validate的使用(转)

    原文链接:http://blog.csdn.net/xing_sky/article/details/8484551 首先是要加入下面两个包 hibernate-validator-4.1.0.Fin ...

  8. centos7安装

    1.准备工具 VMware,我用的是 VMware11 2.打开VMware,创建新的虚拟机 3.选择典型-->下一步 4.稍后安装操作系统-->下一步 5.选择linux操作系统,lin ...

  9. .NET/android/java/iOS AES通用加密解密(修正安卓)

    移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...

  10. vs2012 opencv 配置

    一直没有学习C++,以为该语言太过old,所以要学习新的咚咚.一番学习归来,在进行OpenCV的时候,还是要用到这个C++.几次琢磨,终于能够配置好相关的开发环境和问题初步处理,有些内容得赶快记录下来 ...