美文网首页开发者联盟
iOS 使用自定义字体

iOS 使用自定义字体

作者: 72行代码 | 来源:发表于2019-07-24 15:39 被阅读2次

1. 动态下载系统提供的中文字体

  • 为了实现更好的字体效果,在应用中加入字体包问题:
  1. 字体文件比较大,会造成应用体积剧增
  2. 中文字体通常都是有版权的
  • 动态下载中文字体的API可以动态的向iOS系统中添加字体文件,这些字体文件都是下载到系统的目录中,所以不会造成应用体积增加,字体文件下载后还可以在所有应用间共享。并且字体文件是iOS系统提供的,也免去了字体使用版权的问题

  • 下载的时候需要使用的名字是 PostScript 名称,所以你要动态下载相应的字体的话,还需要使用 Mac 内自带的应用 “字体册 “来获得相应字体的 PostScript 名称。如下显示了从” 字体册 “中获取字体的 PostScript 名称的截图
  • 苹果提供的动态下载代码的 Demo 工程 链接在这里。将此 Demo 工程下载下来,即可学习相应 API 的使用

// 1. 先判断该字体是否已经被下载下来了
- (BOOL)isFontDownloaded:(NSString *)fontName {
    UIFont* aFont = [UIFont fontWithName:fontName size:12.0];
    if (aFont && ([aFont.fontName compare:fontName] == NSOrderedSame 
               || [aFont.familyName compare:fontName] == NSOrderedSame)) {
        return YES;
    } else {
        return NO;
    }
}

// 2. 如果该字体下载过了,则可以直接使用。否则需要先准备下载字体 API 需要的一些参数
// 用字体的 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);

// 3. 准备好上面的descs变量后,则可以进行字体的下载了
__block BOOL errorDuringDownload = NO;
CTFontDescriptorMatchFontDescriptorsWithProgressHandler((CFArrayRef)descs, NULL, ^bool(CTFontDescriptorMatchingState state, CFDictionaryRef  _Nonnull progressParameter){
    
    double progressValue = [[(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingPercentage] doubleValue];
    
    if (state == kCTFontDescriptorMatchingDidBegin) {
        NSLog(@" 字体已经匹配 ");
    } else if (state == kCTFontDescriptorMatchingDidFinish) {    
        if (!errorDuringDownload) {
            NSLog(@" 字体 %@ 下载完成 ", fontName);
        }
    } else if (state == kCTFontDescriptorMatchingWillBeginDownloading) {
        NSLog(@" 字体开始下载 ");
    } else if (state == kCTFontDescriptorMatchingDidFinishDownloading) {
        NSLog(@" 字体下载完成 ");
        dispatch_async( dispatch_get_main_queue(), ^ {
            // 可以在这里修改 UI 控件的字体
            // self.label.font = [UIFont fontWithName:fontName size:12];
        });
    } 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 YES;
});

2. 导入TTF字体文件使用自定义字体

  • 下载字体导入工程(注意上文说的字体版权问题
  • 在 info.plist文件中告诉系统你想导入的字体文件


    方正兰亭纤黑
  • 设置字体到相应控件上(使用的字体名字是 PostScript 名称,上文已说过怎样获取 PostScript 名称)
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 300, 400)];
label.text = @"汉体书写信息技术标准相容档案下载使用界面简单";
label.numberOfLines = 0;
UIFont *font = [UIFont fontWithName:@"FZLTXHK--GBK1-0" size:40];
[self.view addSubview:label];

附:我的博客地址

相关文章

  • iOS在项目中使用自定义字体

    iOS 自定义字体是指,使用自己从外部导入的字体库使用在对应的文本显示中。 一般的iOS自定义的字体库是 .ttf...

  • 动态注册字体

    项目中如果只是使用几种固定的字体,可以本地添加自定义字体,可以参考iOS加入自定义字体库[https://www....

  • iOS开发常用设置

    目录:[TOC]妈呀,怎么还不支持目录语法呢!!!@简叔 一、UI类 1、自定义字体使用   iOS自定义字体支持...

  • React Native iOS端 使用自定义字体时Unreco

    React Native iOS端 使用自定义字体时Unrecognized font family 解决方法:看...

  • (iOS - Objective-C ) UIFont - 自定

    2018.9.19 参考:iOS使用自定义字体的方法(内置和任意下载ttf\otf\ttc字体文件) 没办法,就是...

  • iOS开发之自定义字体

    iOS 开发中文字默认使用的是系统的字体,但如果需要自定义字体,方法也很简单。 实现步骤 下载需要的字体,并将字体...

  • Xcode如何使用字体文件

    iOS开发中系统自带的字体不能满足需求,需要自定义字体,应该怎么做呢?手把手教你使用 1.拿到下载到的字体文件,拖...

  • 十九、Expo 使用自定义字体

    使用自定义字体 iOS和Android都有自己的平台字体集,但如果你想在你的应用中注入更多的品牌个性,那么选择好的...

  • iOS添加自定义字体详解

    问题:iOS中是如何使用自定义字体的?字体是软件开发中个性化的一个重要元素,系统自带了很多丰富的字体,但有时候并不...

  • iOS App导入自定义字体

    原文iOS App导入自定义字体 需求 iOS项目中需要导入第三方字体,来进行显示字体样式。 实现方法 1 先找到...

网友评论

    本文标题:iOS 使用自定义字体

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