iOS 动态下载系统提供的中文字体
使用系统提供的中文字体,既可避免版权问题,又可以减小应用体积
- #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 动态下载系统提供的中文字体的更多相关文章
- UIFontDownLoad ----动态下载系统提供的字体
程序运行结果如下 : 当点击对应单元格实现下载对应的字体. 控制台打印结果如下 : 2015-10-05 11:14:04.132 UIFontDownLoad[12721:86827] state ...
- 【读书笔记】iOS-UIFont-动态下载系统提供的多种中文字体网址
苹果可使用的字体列表: https://support.apple.com/zh-cn/HT202599 动态下载字体的代码demo: https://developer.apple.com/libr ...
- 【读书笔记】iOS-UIFont-动态下载系统提供的字体-官方代码
一,工程目录 二,AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOption ...
- centos 系统字体库安装中文字体
一,centos系统默认不支持中文字体的,需要手动安装windows系统中的中文字体库到centos中. 首先,将windows系统中的字体拷贝出来: windows:打开C:\Windows\Fon ...
- Arch-Linux-添加中文字体
代码下载: Arch-Linux-添加中文字体.txt
- [Xcode 实际操作]九、实用进阶-(2)遍历设备(输出系统)上的所有字体
目录:[Swift]Xcode实际操作 在实际工作中,经常需要调整界面元素的字体种类. 本文将演示输出系统提供的所有字体,方便检索和使用. 在项目导航区,打开视图控制器的代码文件[ViewContro ...
- 解决CentOS无法显示中文字体 | 系统运维 | Web2.0
解决CentOS无法显示中文字体 | 系统运维 | Web2.0 About Me 博客园 devops 前端 张家港水蜜桃 傍晚好! 2013年09月12日 17:56:08 ...
- iOS系统提供开发环境下命令行编译工具:xcodebuild
iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...
- ubuntu14.04恢复系统默认中文字体
今天 Ubuntu14.04已发布就进行了更新,在配置过程中,无意安装了某些中文字体,导致系统的中文字体极其难看,根据网上说的修改配置文件和tweak 修改的方法都不能解决,最终找到的解决办法(htt ...
随机推荐
- UAC在注册表中的对应位置
UAC在注册表中的对应位置 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System 相关键值设置: U ...
- Redux教程3:添加倒计时
前面的教程里面,我们搭建了一个简单红绿灯示例,通过在console输出当面的倒计时时间:由于界面上不能显示倒计时,用户体验并不良好,本节我们就添加一个简单的倒计时改善一下. 作为本系列的最后一篇文章, ...
- Bootstrap <基础十八>面包屑导航(Breadcrumbs)
面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...
- Bootstrap <基础七>按钮
任何带有 class .btn 的元素都会继承圆角灰色按钮的默认外观.但是 Bootstrap 提供了一些选项来定义按钮的样式,具体如下表所示: 以下样式可用于<a>, <butto ...
- AOP基础—代理模式
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代 ...
- codeblocks个性化配置
1.general setting设置默认字体大小设置控制台字体大小:"Settings -> Environment -> View -> Message logs' f ...
- android学习之RadioButton和CheckBox
移通152 余继彪 RadioBuuton是一个单选按钮,CheckBox是一个复选按钮 . RadioButton的使用 ,首先要将RadioButton放在RadioGroup中,RadioGro ...
- Plupload上传组件 + javaweb实现上传源码以及DEMO
Plupload 是一个Web浏览器上的界面友好的文件上传模块,可显示上传进度.图像自动缩略和上传分块.可同时上传多个文件: 上网找了很多Plupload的DEMO都无法正常使用, 而且Pluploa ...
- ctags and vim
1,源码目录下第归检索. ctags -R * 2,搜索tag并用vim打开: vim -t <tag> 3,在vim 下的一些操作: Keyboard command Action Ct ...
- hashmap 读取
hashTable hashSet 都差不多 以hashmap为例,底层是一个散列表 数组,然后数组存出一个entry对象,对象中有两个泛型属性,一个可以指向自身类型的引用,这样就可以在每一个数组的位 ...