ttc字体文件,App导入自定义字体

作者:澳门新葡京平台游戏

新澳门葡京娱乐场下载,新普京娱乐,需求

iOS项目中需要导入第三方字体,来进行显示字体样式。

iOS使用自定义字体的方法(内置和任意下载ttfotfttc字体文件)

最近做了个有关阅读的应用,使用了自定义字体,学习了一下这方面的知识。

 

1.首先是最简单也普遍的做法,打包内置字符库文件:

 

把字体库文件添加到工程,如font1.ttf添加到工程,然后在工程plist添加一项Fonts provided by application,这是个数组,然后添加key item1,value就是刚才说的font1.ttf,如图:

 

 

 

 

 

那么在工程里就可以直接使用这个字体,直接用

 

(UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize; 即可。

 

不过需要注意的是,这个fontName不是文件名,而是里面真正的字体名。如上面的font1.ttf里面的字体是MFQingShu_Noncommercial-Regular,那就直接用

 

UIFont *font = [UIFont fontWithName:@"MFQingShu_Noncommercial-Regular" size:12];就能去到正确的字体。

 

 

 

2.但是一般来说,字体文件比较大,不该内置,而且如果都用plist预定义的方式,那肯定就没法覆盖全,导致用户不能使用更多自己喜欢的字体。所以应该用代码读取字体的方式:

 

提供字体文件路径,返回所需要字体:

 

复制代码

-(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;

}

复制代码

不过这个方法只支持7.0以上,暂时在7.0以下没有找到方法。

 

个人看法,因为ttc里面的字体都比较相似,所以其实使用一个也足以。

 

 

 

附:(字体的介绍)

 

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

 

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

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

) 最近做了个有关阅读的应用,使用了自定义字体,学习了一下这方面的知识。...

有时候我们写app的时候不想使用默认的字体,我们会用到UI给我们设计好的字体,或者别的字体,那么我们改如何设置呢.
首先先看一下我自己导入的字体和苹果给我们自带的字体都有哪些吧.
看一下样式

Fonty是什么

Fonty 是一个iOS字体插件。它能让你的iOS 应用直接使用第三方的ttf, otf or ttc字体,而无需事先将字体文件加入安装包内。

实现方法

先在字体吧找到漂亮好看的第三方字体,网站如下:

下载的字体可能三种后缀格式,分别为:ttc/ttf/otf

  1. TTC是几个TTF合成的字型,例如包含粗体、细体两种字型,TTF就只有一种字型。
  2. TTF是apple和微软共同推出的字体文件格式,只有一种字型。
  3. OTF是TTF的升级版,支持更高级特性的字体。

直接拉近资源目录就看,如图下所示:

新普京娱乐 115287868508087.jpg

在info.plist文件中高速系统你想连接导入的字体文件,字段为

Key:

Fonts provided by application

Value:

字体名称.otf/.ttf/.ttc

如图所示:

新普京娱乐 215287877401423.jpg

通过遍历的方式进行打印字体名称,代码如下:

for (NSString *fontfamilyname in [UIFont familyNames]) { NSLog(@"family:'%@'",fontfamilyname); for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) { NSLog(@"tfont:'%@'",fontName); } NSLog(@"-------------"); } 

打印出来找到我导入的字体font:后面的字段就是我们想要的字体名称,如下图:

新普京娱乐 315287882812975.jpg

如下图所示,这个字体的名称为中文的,这种情况下,就只能通过字体的中文拼音大写去找,FZCTH,这几个字母刚好能匹配到打印出来的字体FZCTHJW--GB1-0,这个也刚好是我们想要得到的字体。

新普京娱乐 415287885096646.jpg

通过代码将字体设置为导入的这个新字体就可以,方法如下:

- (UILabel *)gameNameLabel{ if (!_gameNameLabel) { _gameNameLabel = [[UILabel alloc] init]; _gameNameLabel.text = @" "; _gameNameLabel.font = [UIFont fontWithName:@"FZCTHJW--GB1-0" size:55]; _gameNameLabel.textColor = [ColorUtil cl_colorWithHexString:@"#FFFFFF"]; } return _gameNameLabel;}

至此,我们就成功导入并使用 .ttf 文件了。

借鉴作者的链接地址:

新普京娱乐 5

Demo

新普京娱乐 6

font.gif

使用步骤

首先说一下.我们如何设置字体的样式呢,我们可以这样设置:

准备 URL

准备几个可以下载的字体文件地址,例如https://github.com/s2mh/FontFile/raw/master/Chinese/Simplified Chinese/ttc/Xingkai.ttc。可以是ttf、otf或ttc格式。

label.font = [UIFont fontWithName:@"Helvetica-Bold" size:17.f]; 

导入

将Fonty库导入到你的工程中。你可以直接手动导入Fonty文件夹,也可以使用CocoaPods:

target 'TargetName' do
pod 'Fonty'
end

使用时所需的头文件:

#import "Fonty.h"

那么我们该如何得到我们想要的字符串呢?
我们可以这样得到所有的字符串

3 配置

在AppDelegate中,将准备好的字体文件地址配置给Fonty:

 [FYFontManager setFileURLStrings:@[@"https://github.com/s2mh/FontFile/raw/master/Chinese/Simplified Chinese/ttc/Xingkai.ttc",
                                    @"https://github.com/s2mh/FontFile/raw/master/Common/Bold/LiHeiPro.ttf",
                                    @"https://github.com/s2mh/FontFile/raw/master/English/Bold/Luminari.ttf",
                                    @"https://github.com/s2mh/FontFile/raw/master/Common/Regular/YuppySC-Regular.otf"]];

FYFontManager(用于管理字体文件)会据此生成对应的FYFontFile对象(用于描述字体文件信息):

NSArray<FYFontFile *> *fontFiles = [FYFontManager fontFiles];
NSArray *familyFonts = [UIFont familyNames];
for (NSString * fontStr in familyFonts) {
    NSArray *fonts = [UIFont fontNamesForFamilyName:fontStr];
    for (NSString *fontStr in fonts) {
        NSLog(@"fontStr =  %@" , fontStr);
    }
  }

下载&注册

用FYFontManager的下载字体文件:

[FYFontManager downloadFontFile:file];

下载完成后,Fonty会自动保存和注册字体文件。注册成功后,Fonty会发出FYFontFileRegisteringDidCompleteNotification通知。该通知包含已注册的文件:

- (void)completeFile:(NSNotification *)notification {
    FYFontFile *file = [notification.userInfo objectForKey:FYFontFileNotificationUserInfoKey];
    ...
}

注意:ttf和otf文件包含一种字体,ttc文件可能包含多个字体。

然后我们设置我们想要的样式就好了.
如果我们不想要苹果给我们带的字体,我们需要自己的字体,那么我们该如何做呢.

获得字体

已注册的字体文件包含一个FYFontModel对象数组,一个FYFontModel代表一种字体。可以直接从FYFontModel中获得字体:

FYFontModel *model = file.fontModels[0];
UIFont *font = [model.font fontWithSize:17.0];

也可以设置FYFontManager的mainFont,通过UIFont (FY_Fonty)分类的方法,便捷地获得字体:

[FYFontManager setMainFont:font];
...

textView.font = [UIFont fy_mainFontWithSize:17.0];

1、准备好ttf的字体包,导入的字体格式可以是ttf、otf、ttc

新普京娱乐 7

01.png

存档

在应用关闭前保存设置的信息,可保证每次应用下次启动后使用同样的字体。

[FYFontManager archive];

2、将字体包拖入项目中

新普京娱乐 8

02.png

加入项目中我们就可以看到如下内容了

新普京娱乐 9

03.png

3、在info.plist文件中我们需要加入相应的信息,这一步实际上是在项目的Info页里面增加Fonts provided by application项,并设置相应的ttf文件进去,这样就告诉了应用,我要加入新的字体了,对应的字体文件是哪些,视图如下:

新普京娱乐 10

04.png

4、准备工作我们就做好了,下面就是来使用了,我们需要将我们导入的字体的字符串先打印出来,以便我们可以设置。

新普京娱乐 11

05.png

新普京娱乐 12

06.png

5、使用字体

[UIFont fontWithName:@"^cwEO`W^" size:17];

6、如果我们想要将系统的默认字体改变的化,给UIFont一个分类,重写systemFontOfSize:方法,将我们的字体设置成自己的就可以了。

大概就这些步骤了,如有需要Demo可以下载:https://github.com/zhangyqyx/appFont
希望大家能提出宝贵的意见,可以给我留言,也可以发邮件到我的邮箱:namezyqyx@163.com
谢谢大家,如果你有更好的想法或文章请告知,不胜感激。

本文由新葡京8455发布,转载请注明来源

关键词: