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

#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. RHEL7修改swappiness

    linux系统swappiness参数在内存与交换分区间优化 2014-08-14 10:24:19分类: Linux swappiness的值的大小对如何使用swap分区是有着很大的联系的.swap ...

  2. io端口与io内存详解

    (一)地址的概念 1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义.物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显存.BIOS等).在程序指令中的虚拟地址 ...

  3. 【转】Tomcat的默认访问路径

    放在外网的应用,用户多是直接输入域名访问,相信没有哪个后面还加个尾巴,而Tomcat的默认目录是ROOT,所以我们需要更改其默认目录. 更改Tomcat的默认目录很简单,只需要修改server.xml ...

  4. extjs combobox

    states.js中 Ext.example.states=[ ['AL','ALabama','The Heart of Dixie'], ['AK','Alaska','The Land of t ...

  5. 【转】Nginx中upstream有以下几种方式:

    1.轮询(weight=1) 默认选项,当weight不指定时,各服务器weight相同, 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.upstream bak ...

  6. tail 显示文件最后若干行内容

    功能:tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行.显示每个指定文件的最后10 行到标准输出.若指定了多于一个文件,程序会在每段输出的开始添加相应文件名作为头.如果不指定文件或文 ...

  7. c# 字符串操作

    一.字符串操作 //字符串转数组 string mystring="this is a string" char[] mychars=mystring.ToCharArray(); ...

  8. EntityFrameWork使用过程问题总结

    1.记录上次遇到个一个问题. (1).vs2013中的EntityFramework不能识别odp11,所以在用ef的时候 ,要换vs2012 (2).opd12不能识别Oracle  9i(所以这个 ...

  9. c#缓存介绍(转)

    缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. 本章从缓存 ...

  10. Java学习1 - java 历史

    Sun的Java语言开发小组成立于1991年,其目的是开拓消费类电子产品市场,例如:交互式电视,烤面包箱等.Sun内部人员把这个项目称为 Green,那时World Wide Web还在图纸上呢.该小 ...