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

#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. Android中的布局动画

    简介 布局动画是给布局的动画,会影响到布局中子对象 使用方法 给布局添加动画效果: 先找到要设置的layout的id,然后创建布局动画,创建一个LayoutAnimationController,并把 ...

  2. ajax属性 data--------------20160705

    $.ajax({ type : "get", //这里get和post都可以 url : "cccccc.ccc", data: "name = xx ...

  3. Pycharm快捷键

    相比于eclipse,pycharm的确很方便,现就一些常用的快捷键记录一下: CTRL Q: 在参数列表位置,显示可以输入的所有参数.CTRL Q: 查看选中方法的文档字符串 阅读CTRL -: 折 ...

  4. 前端开发week1

    1.前端开发前期相关工具 photoshop:主要学习运用与前端相关工具,了解UI与前端的关联.    axure:原型设计,通过设计原型了解网页基本结构,结合ps对UI有更好的理解.    webs ...

  5. leetcode 日记 162. Find Peak Element java python

    根据题目可知,输入为:一个相邻元素不相等的数列,输出为:其中一个(上)峰值的序号.并且要求时间复杂度为logn 分析:由于题目要求时间复杂度为logn,因此不能进行全部遍历.又因为只需要找到其中的一个 ...

  6. Eclipse_luna_J2EE_For_JS+tomcat8.0环境搭建、配置、开发入门

    一.所有需要的软件.插件等下载地址 J2SE的官方下载路径:http://www.oracle.com/technetwork/java/javase/downloads/index.html Ecl ...

  7. rpc使用JUnit模块测试设计的方法及常见问题

    RPC:Remote Procedure Call 远程过程调用 Wikipedia:http://en.wikipedia.org/wiki/Remote_Procedure_Call 百度百科:h ...

  8. CocoaPods介绍。如何安装Ruby环境,如何下载和安装CocoaPods?

    CocoaPods介绍? 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其 ...

  9. freeCAD特性列表

    通用特性 基本应用 FreeCAD 是跨平台的. 它在 Windows Linux 和 Mac OSX 等平台上运行表现一致. FreeCAD 是图形化应用程序. FreeCAD 基于著名的 GUI ...

  10. 关于升级xcode8

    升级xcode8已是必然,升级ios10的用户不能说大有人在,应该也不会少,如果不升级xcode8,上架最新的包,那么可能应用在ios10 上是不支持的.so,这些xcode8的新特性,你应该了解!! ...