iOS使用自訂字型的方法(內建和任意下載ttf\otf\ttc字型檔)

來源:互聯網
上載者:User

iOS使用自訂字型的方法(內建和任意下載ttf\otf\ttc字型檔)
最近做了個有關閱讀的應用,使用了自訂字型,學習了一下這方面的知識。 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字型,因為共用筆劃資料,所以大多這個集合中的字型區別只是字元寬度不一樣,以便適應不同的版面排版要求。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.