動態(tài)注冊字體

項目中如果只是使用幾種固定的字體,可以本地添加自定義字體屠橄,可以參考iOS加入自定義字體庫 這篇文章詳細的說明如何在本地添加自定義字體

如果本地添加的幾種字體難以滿足需求族跛,這時候就會使用從服務器動態(tài)下發(fā)字體的方式來實現(xiàn),這時候就需要動態(tài)的向字體庫中注冊自定義字體锐墙,然后再調(diào)用[UIFont fontWithName: size:]方法設置字體

先說下思路:

  1. 下載字體到APP的沙盒中礁哄,并獲取到ttf文件路徑
  2. 判斷路徑是否存在且有效
  3. 使用文件路徑注冊自定義字體
  4. 返回字體名稱
  5. 調(diào)用[UIFont fontWithName: size:]方法設置字體

思路有了,剩下的就是實現(xiàn)

在實現(xiàn)之前溪北,還需要對功能進行設計桐绒,比如怎么封裝才能讓這個功能簡單易用夺脾?又要對外暴露哪些接口?效率等都是需要我們考慮的

在項目中茉继,這個下載應該分屬于下載模塊咧叭,對于我們封裝注冊字體是不需要管的,同時烁竭,項目中注冊的字體可能有很多菲茬,這個根據(jù)需求來定,所以我們可以使用單例實現(xiàn)這個功能派撕。

記住我們的目標:給我一個字體路徑婉弹,我就返回給你一個字體名稱

1. 設計對外提供的接口

為了調(diào)用的方便性,我們可以對外暴露一個類方法供使用者調(diào)用
+ (NSString *)registerFontWithPath:(NSString *)path;

2. 參數(shù)合法性校驗

在實現(xiàn)內(nèi)部终吼,我們需要判斷參數(shù)的合法性

BOOL isDir;
BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:fontPath isDirectory:&isDir];
// 路徑是否存在镀赌,且路徑非目錄
if (fontPath.length <= 0 || !isExist || (isExist && isDir)) {
    return nil;
}

3. 注冊字體并返回

NSURL *fontUrl = [NSURL fileURLWithPath:fontPath];
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)fontUrl);
CGFontRef fontRef = CGFontCreateWithDataProvider(fontDataProvider);
CGDataProviderRelease(fontDataProvider);
CTFontManagerRegisterGraphicsFont(fontRef, NULL);
fontName = CFBridgingRelease(CGFontCopyPostScriptName(fontRef));
CGFontRelease(fontRef);

return fontName;

到這里,動態(tài)注冊字體的介紹已經(jīng)結(jié)束际跪。

這樣的設計雖然可以商佛,但是為了app的性能,在這個單例里面還可以> 再加入字體緩存垫卤,當同一個字體路徑多次請求的時候威彰,只需要先查找> 緩存中是否有該字體,有的話直接從緩存中獲取即可穴肘,這樣可以避免> 重復的注冊字體浪費資源。
參照iOS方法查找

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舔痕,一起剝皮案震驚了整個濱河市评抚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伯复,老刑警劉巖慨代,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異啸如,居然都是意外死亡侍匙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門叮雳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來想暗,“玉大人,你說我怎么就攤上這事帘不∷的” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵寞焙,是天一觀的道長储狭。 經(jīng)常有香客問我互婿,道長,這世上最難降的妖魔是什么辽狈? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任慈参,我火速辦了婚禮,結(jié)果婚禮上刮萌,老公的妹妹穿的比我還像新娘懂牧。我一直安慰自己,他們只是感情好尊勿,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布僧凤。 她就那樣靜靜地躺著,像睡著了一般元扔。 火紅的嫁衣襯著肌膚如雪躯保。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天澎语,我揣著相機與錄音途事,去河邊找鬼。 笑死擅羞,一個胖子當著我的面吹牛尸变,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播减俏,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼召烂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了娃承?” 一聲冷哼從身側(cè)響起奏夫,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎历筝,沒想到半個月后酗昼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡梳猪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年麻削,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片春弥。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡呛哟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惕稻,到底是詐尸還是另有隱情竖共,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布俺祠,位于F島的核電站公给,受9級特大地震影響借帘,放射性物質(zhì)發(fā)生泄漏姐帚。R本人自食惡果不足惜弦蹂,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望王滤。 院中可真熱鬧腿准,春花似錦际起、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至弟跑,卻和暖如春灾前,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孟辑。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工哎甲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饲嗽。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓炭玫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親貌虾。 傳聞我的和親對象是個殘疾皇子吞加,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容