美文网首页
iOS_动态添加中文字体库

iOS_动态添加中文字体库

作者: 辉_行者孙 | 来源:发表于2017-08-25 11:39 被阅读0次

ios本身支持的字体库有限,如果用到比较偏门的萌萌哒字体就更不支持了,本文简单叙述一下iOS添加字体库的几种方式,希望可以帮助更多的人,节省更多时间,不胜荣幸

我们项目的需求: 

WebView加载的文章需要支持楷体,iOS本身没有这个字体库,所以需要添加字体库才能支持

方式一:

简单粗暴型: 将字体库资源直接添加到工程中,在plist文件配置后方可使用

方式二:

调用苹果提供的字体API,将字体库下载到手机系统中,相比方式一的优点是可以减少工程的体积,因为一个字体库通常在10M以上,并且可以根据服务端返回信息动态添加字体库

方式一具体步骤如下:

首先需要找到字体库资源:

在Launchpad中搜索“字体册”,

找到字体show in finder下载字体库  

将字体库导入工程中

在infoplist进行设置

使用方式:UIFont *font = [UIFont fontWithName:@"" size:12];

方式二 : 动态添加字体库

iOS6以后苹果就开始支持动态下载中文字体已供应用中展示个性字体的需求,由于下载的时候需要使用的名字是PostScript名称,需要使用Mac内自带的应用“字体册“来获得相应字体的PostScript名称。如下显示了从”字体册“中获取《娃娃体-繁 常规体》字体的PostScript名称的截图

代码部分:

- (void)requestFont

{

UIFont* aFont = [UIFont fontWithName:fontName size:12.0];

if (aFont && ([aFont.fontName compare:fontName] == NSOrderedSame

|| [aFont.familyName compare:fontName] == NSOrderedSame))

{

return;

} else

{

// 用字体的 PostScript 名字创建一个 Dictionary

NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObjectsAndKeys:fontName, kCTFontNameAttribute, nil];

// 创建一个字体描述对象 CTFontDescriptorRef

CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs);

// 将字体描述对象放到一个 NSMutableArray 中

NSMutableArray *descs = [NSMutableArray arrayWithCapacity:0];

[descs addObject:(__bridge id)desc];

CFRelease(desc);

__block BOOL errorDuringDownload = NO;

CTFontDescriptorMatchFontDescriptorsWithProgressHandler( (__bridge CFArrayRef)descs, NULL,  ^(CTFontDescriptorMatchingState state, CFDictionaryRef progressParameter) {

double progressValue = [[(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingPercentage] doubleValue];

if (state == kCTFontDescriptorMatchingDidBegin) {

NSLog(@" 字体已经匹配 ");

} else if (state == kCTFontDescriptorMatchingDidFinish) {

if (!errorDuringDownload)

{

NSLog(@" 字体 %@ 下载完成 ", fontName);

dispatch_async( dispatch_get_main_queue(),

^ {

// 可以在这里修改 UI 控件的字体

self.btn.titleLabel.font = [UIFont fontWithName:fontName size:15];

[self.btn setTitle:@"按钮按钮" forState:UIControlStateNormal];

});

}

} else if (state == kCTFontDescriptorMatchingWillBeginDownloading) {

NSLog(@" 字体开始下载 ");

} else if (state == kCTFontDescriptorMatchingDidFinishDownloading)

{

NSLog(@" 字体下载完成 ");

dispatch_async( dispatch_get_main_queue(),

^ {

// 可以在这里修改 UI 控件的字体

self.btn.titleLabel.font = [UIFont fontWithName:fontName size:15];

[self.btn setTitle:@"按钮按钮" forState:UIControlStateNormal];

});

} else if (state == kCTFontDescriptorMatchingDownloading) {

NSLog(@" 下载进度 %.0f%% ", progressValue);

} else if (state == kCTFontDescriptorMatchingDidFailWithError) {

NSError *error = [(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingError];

if (error != nil)

{

_errorMessage = [error description];

} else {

_errorMessage = @"ERROR MESSAGE IS NOT AVAILABLE!";

}

// 设置标志

errorDuringDownload = YES;

NSLog(@" 下载错误: %@", _errorMessage);

}

return (BOOL)YES;

});

}

}

相关文章

  • iOS_动态添加中文字体库

    ios本身支持的字体库有限,如果用到比较偏门的萌萌哒字体就更不支持了,本文简单叙述一下iOS添加字体库的几种方式,...

  • iOS_外接字体库

    外接字体库(.otf .ttf) 步骤:1.将字体库拉进项目2.在info.plist 中添加 Fonts pr...

  • iOS 添加第三方字体库

    iOS向项目中添加第三方的字体库,一般分4步。 将字体库添加到项目中。添加字体到项目中.png 在info.pli...

  • ios 系统字体 以及添加自定义字体

    1.准备字体库(.ttf .otf等格式) 添加自定义字体的前提是要有字体库,字体库可以百度,也可以从mac上找...

  • iOS动态下载字体

    说明 在ios开发中,我们经常需要根据UI来添加不同的字体,但是一个字体库少说也有10M以上,如果将字体库添加到代...

  • iOS如何使用自己添加的字体库

    有时候为了界面的美观,可能需要添加第三方的字体库。那个如何使用呢?1.将字体库添加到项目中。2.在info.pli...

  • Mac matplotlib 中文显示设置

    1. matplotlib缺少中文字体库 使用pip install matplotlib、conda insta...

  • python plt.show() 或者 dataframe.p

    定位原因: 主要是matplotlib 字体库缺失,没有中文字体导致的 解决方法: 1, 安装中文字体; ...

  • 在ionic3中自定义自己的图标字体

    资源:阿里图标字体库 step1:寻找资源 搜索图标字体库,找到自己需要的图标字体并加入购物车。添加到已存在的项目...

  • iOS 添加字体库

    1.文件添加 2.收集的一些文字链接:http://www.taguage.com/tag/55cd4f12681...

网友评论

      本文标题:iOS_动态添加中文字体库

      本文链接:https://www.haomeiwen.com/subject/kbrudxtx.html