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 ...
随机推荐
- Oracle数据库如何创建DATABASE LINK?
Oracle数据库如何创建DATABASE LINK? 2011-08-09 14:54 taowei20061122 CSDN博客 http://blog.csdn.net/taowei20061 ...
- AngularJs的UI组件ui-Bootstrap分享(十四)——Carousel
Carousel指令是用于图片轮播的控件,引入ngTouch模块后可以在移动端使用滑动的方式使用轮播控件. <!DOCTYPE html> <html ng-app="ui ...
- 使用ISO文件安装Linux
一. 准备知识 1. ISO文件 我们普遍使用的ISO文件是指包含着整个CD-ROM(ISO-9660 文件系统)内容的 映象, 是整个碟片从0扇区到最后一个扇区的完整复制,经常被用来在网络上传输 对 ...
- maven下载速度慢的解决方法(转)
原文链接:http://blog.csdn.net/u013009618/article/details/53980983 maven是支持镜像的,我们可以在maven的conf文件加下的settin ...
- Javascript常用方法函数收集(二)
Javascript常用方法函数收集(二) 31.判断是否Touch屏幕 function isTouchScreen(){ return (('ontouchstart' in window) || ...
- java异常架构图 和几个面试题
1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...
- SWFUpload - JQuery上传插件
首先,大家可以去SWF的官网下载相关Demo或者源码. 官方地址:http://code.google.com/p/swfupload/ 官方Demo:http://demo.swfupload.or ...
- 解决 emulator-5554 disconnected! Cancelling
在命令行状态下: adb kill-server ---再adb start-server:
- UE4 Android打包 问题 记录笔记
问题一:error: expression result unused [-Werror,-Wunused-value] 虽然看了输出日志知道了这行沉余代码删掉就行,但是不是很懂这个地方报错意义. 问 ...
- 背景建模post_processing常用opencv函数(怒了)
1.saturate_cast<uchar>来说,就是把数据转换成8bit的0~255区间,负值变成0,大于255的变成255.如果是浮点型的数据,变成round最近的整数 2.cv::M ...