天天看點

關于導入字型庫到項目中

最近工作中用到了字型,就記錄了一下方法

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字型則隻包含一種字型。

版權聲明:本文為CSDN部落客「weixin_33724046」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_33724046/article/details/91618709