文档章节

关于导入字体库到项目中

w_sen
 w_sen
发布于 2016/03/03 10:03
字数 682
阅读 31
收藏 1
点赞 1
评论 0

最近工作中用到了字体,就记录了一下方法

1.1,把字体库导入到工程Resources中
1.2, 然后在你的工程的Info.plist文件中新建一行(Add Row),添加key为:UIAppFonts,类型为Array或Dictionary都行;在UIAppFonts下再建立一个键值对,key 为:Item 0,添加Value为xxx.ttf(你字体的名字,string型),可以添加多个

plist文件中显示如下

<key>UIAppFonts</key>

<array>

<string>xxxx.ttf</string>

<string>xxxxxx.ttf</string>

</array>


1.3,输出所有字体,使用添加的字体

NSArray *familyNames = [UIFont familyNames];  
for(NSString *familyName in familyNames ){  
     printf( "Family: %s \n", [familyName UTF8String]);  
     NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];  
     for(NSString *fontName in fontNames ){  
         printf( "\tFont: %s \n", [fontName UTF8String]);  
     }
}

//字体使用
[UIFont fontWithName:@"字体名称" size:字体大小];

2,用代码读取字体的方式:

-(UIFont*)customFontWithPath:(NSString*)path size:(CGFloat)size
{
    NSURL *fontUrl = [NSURL fileURLWithPath:path];
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)fontUrl);
    CGFontRef fontRef = CGFontCreateWithDataProvider(fontDataProvider);
    CGDataProviderRelease(fontDataProvider);
    CTFontManagerRegisterGraphicsFont(fontRef, NULL);
    NSString *fontName = CFBridgingRelease(CGFontCopyPostScriptName(fontRef));
    UIFont *font = [UIFont fontWithName:fontName size:size];
    CGFontRelease(fontRef);
    return font;
}

这样就不需要在plist设定任何东西,只需要得到字体库文件的路径,就可以取出对应的字体。

上面的方法对于TTF、OTF的字体都有效,但是对于TTC字体,只取出了一种字体。因为TTC字体是一个相似字体的集合体,一般是字体的组合。所以如果对字体要求比较高,所以可以用下面的方法把所有字体取出来:

-(NSArray*)customFontArrayWithPath:(NSString*)path size:(CGFloat)size
{
    CFStringRef fontPath = CFStringCreateWithCString(NULL, [path UTF8String], kCFStringEncodingUTF8);
    CFURLRef fontUrl = CFURLCreateWithFileSystemPath(NULL, fontPath, kCFURLPOSIXPathStyle, 0);
    CFArrayRef fontArray =CTFontManagerCreateFontDescriptorsFromURL(fontUrl);
    CTFontManagerRegisterFontsForURL(fontUrl, kCTFontManagerScopeNone, NULL);
    NSMutableArray *customFontArray = [NSMutableArray array];
    for (CFIndex i = 0 ; i < CFArrayGetCount(fontArray); i++){
        CTFontDescriptorRef  descriptor = CFArrayGetValueAtIndex(fontArray, i);
        CTFontRef fontRef = CTFontCreateWithFontDescriptor(descriptor, size, NULL);
        NSString *fontName = CFBridgingRelease(CTFontCopyName(fontRef, kCTFontPostScriptNameKey));
        UIFont *font = [UIFont fontWithName:fontName size:size];
        [customFontArray addObject:font];
    }
    
    return customFontArray;
}

附:(字体的介绍)

TTF(TrueTypeFont)是一种字库名称。TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式。

TTC字体是TrueType字体集成文件(. TTC文件),是在一单独文件结构中包含多种字体,以便更有效地共享轮廓数据,当多种字体共享同一笔画时,TTC技术可有效地减小字体文件的大小。

TTC是几个TTF合成的字库,安装后字体列表中会看到两个以上的字体。两个字体中大部分字都一样时,可以将两种字体做成一个TTC文件,常见的TTC字体,因为共享笔划数据,所以大多这个集合中的字体区别只是字符宽度不一样,以便适应不同的版面排版要求。

 

而TTF字体则只包含一种字型。

© 著作权归作者所有

共有 人打赏支持
w_sen

w_sen

粉丝 6
博文 18
码字总数 10053
作品 1
天津
iOS工程师
iOS在应用中添加自定义字体

iOS在应用中添加自定义字体 一、在应用中添加自定义字体的步骤 1、网上提供的字体库有很多,下载完成后,将其导入工程中,一般为ttf格式。 2、注意Build Phases中的Copy Bundle Resources中是...

珲少
2015/10/10
1K
2
你们在准备双十二?我给我的电商开源项目准备了一个新首页(我的电商项目界面美化之旅2)

先介绍一下我的开源电商项目,简书介绍,这个项目包含了安卓客户端的代码和Spring服务端代码,如果觉得不错,请,如果觉得太丑请用将我砸醒。我写这篇文章的目的是对这个项目的客户端进行美化...

PcDack
2017/12/11
0
0
关于antd的icon字体图标的扩展

在做一个由dva+antd构成的前端项目的时候,在使用antd的Icon组件的时候,由于其自带的字体图标无法满足需要,所以要进行扩展。现在把扩展过程分为几个步骤: 1.需要在icon官方资源库中建立一...

少不读水浒
04/13
0
0
Android性能优化典例(二)

1、使用 Maven 依赖方案代替使用导入jar包方案 如果项目中需要用到第三方jar包,常用的做法是去网上下载后然后放入libs文件夹,再添加到项目依赖,不过,在Android Studio已经不推荐使用这套...

u010687392
2015/08/24
0
0
Android多分辨率适配实践【1】使用字体图标(内含两枚神器)

目录 Android多分辨率适配实践【0】基础适配篇(撰写中) Android多分辨率适配实践【1】使用字体图标,精准控制不同分辨率的图标样式(内含两枚神器) Android多分辨率适配实践【2】Iconify...

刘星石
2016/03/02
45
0
「iTerm」 and 「Oh My Zsh」 配置记录

昨天配置了一下自己的iTerm,最后的效果确实颜值飙升,终端的使用也方便了许多。非常感谢简书的@SuperDanny,本文主要是对他的教程中遇到问题的注解,方便以后查阅。 首先上效果图: 效果图 ...

halohily
2017/03/08
0
0
不得不说的iOS字体在app中的使用规范

iOS系统家族字体(family font) 系统字体意味着可以不需要另外导入字体包就可以在项目中使用,而且不涉及商用版权问题。 1.系统家族字体 可通过以下代码在控制台打印出系统家族字体的个数和...

无忌不悔
2017/08/17
0
0
lable 的那些属性

lable.font = UIFont.init(name: "字体名字", size: 18) :同时设置字体大小 self.nameLable.setSubstituteFontName("设置字体名字") 当设置字体系统库中没有时,使用第三方字库(格式:ttf...

媛美一生
2016/12/08
10
0
lis1314/easy-excel

#easy-excel 使用介绍 http://my.oschina.net/lis1314/blog/693989 关于与Spring集成只需要加入下面配置 一、jar包依赖 二、如何使用?,参考 org.easy.excel.test.ExportTest org.easy.exce...

lis1314
2016/06/19
0
0
iOS 在UILabel显示不同的字体和颜色

在项目开发中,我们经常会遇到在这样一种情形:在一个UILabel 使用不同的颜色或不同的字体来体现字符串,在iOS 6 以后我们可以很轻松的实现这一点,官方的API 为我们提供了UILabel类的attri...

Grozy
2014/03/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何把你的Linux系统变的更加安全

做为一个小白,以为自己懂了点Linux知识,会搭建Linux各种服务就觉得自己牛的不要要的。在我们团队里面,我将使用了一台破电脑搭建Linux服务器,上面跑着Ftp服务存放着资源,ssh服务可以远程...

问题终结者
4分钟前
0
0
lombok的使用和原理

一、项目背景 在写Java程序的时候经常会遇到如下情形: 新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法 lombok项目的产生就是为了省去我们手...

颖辉小居
4分钟前
0
0
rsync至服务同步-系统日志-screen

rsync: 服务同步;配置文件:/etc/rsyncd.conf 默认端口:873 服务启动:rsync --daemon rsync -av /root/1.txt 192.168.1.2::test/2.txt (test为模块名称) /etc/rsync.conf配置样例: #指定...

ZHENG-JY
6分钟前
0
0
读取文件中内容转换成字符串

package com.lieni.ruyu.api.xmlTool; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Unsuppo......

newdeng
6分钟前
0
0
《PHP和MySQL Web 开发》 第8章 设计Web数据库

LCL WARNING 这是我学习《PHP和MySQL Web 开发》的读书笔记,一些重要的知识点我会记录下来,当然只会写我觉得重要的。 如果有幸有人看到这个学习笔记了,你要结合着书看,不要光看这个笔记。...

十万猛虎下画山
13分钟前
0
0
Spring+jpaNo transactional EntityManager available

TransactionRequiredException: No transactional EntityManager availableEntityManager执行以下方法(refresh, persist, flush, joinTransaction, remove, merge) 都需要需要事务i......

wpfc
14分钟前
0
0
八幅漫画理解使用JSON Web Token设计单点登录系统

八幅漫画理解使用JSON Web Token设计单点登录系统 Sep 07, 2015 in Engineering 上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。...

祖冲之
16分钟前
0
0
Spring框架中的设计模式(三)

Spring框架中的设计模式(三) 原创: 瑞查德-Jack 在之前的两篇文章中,我们看到了一些在Spring框架中实现的设计模式。这一次我们会发现这个流行框架使用的3种新模式。 本文将从描述两个创意...

瑞查德-Jack
19分钟前
1
0
[MicroPython]TPYBoard智能小车“飞奔的TPYBoard装甲一号”

智能小车作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能小车能够实时显示时间、速度、里程,具...

bodasisiter
21分钟前
0
0
桌面虚拟化VDI(Virtual Desktop Infrastructure)

为了保证员工(客户)不把公司的资料复制、传输给别人。可以把员工平时办公放在服务器上做。所以使用桌面虚拟化。就是把一个服务器虚拟出很多桌面系统(如:windows)。 桌面虚拟化最大的优势...

王坤charlie
28分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部