我們會(huì)在QQ空間發(fā)現(xiàn)一些開過會(huì)員的好友,發(fā)動(dòng)態(tài)往往會(huì)顯示一些個(gè)性化的字體。要實(shí)現(xiàn)這樣的效果可分為兩種方式。
(1) 把你需要的字體都拖入到工程本地,直接設(shè)置需要的字體。
(2) 將所有的字體放入服務(wù)器,需要的時(shí)候下載到本地然后加載即可。
很明顯第一種方案有弊端,如果個(gè)性化字體特別多那么直接造成的后果是應(yīng)用的包很大,當(dāng)然如果你只有幾種字體直接放到本地還是很方便的隨用隨取,即使沒有網(wǎng)絡(luò)依然可以顯示個(gè)性化字體。
1.字體直接放到本地
基本思路
(1) 將字體庫放入工程中
(2) 在info.plist中加入字體名稱
(3) 找到目標(biāo)字體真實(shí)可用的fontName,用fontWithName: size:設(shè)置字體
(1) 將字體庫放入工程中
直接拖著字體文件放入工程,勾選如下圖所示,然后Finish
(2)在info.plist中加入字體名稱
在info.plist中加入 Fonts provided by application 字段類型為數(shù)組,然后把你剛才拖入工程的字體文件的名稱加入到Fonts provided by application內(nèi),如下圖:
(3)找到目標(biāo)字體真實(shí)可用的fontName,用fontWithName: size:設(shè)置字體
我們看到的字體文件的文件名并不是字體的fontName,我們在mac中打開字體文件,可以看到字體的fontName,如下圖:
也許有些同學(xué)打開是這樣的???? (╥╯^╰╥)
fontName不可能是漢字,所以肯定fontName不是上圖所以的了,如果遇到這種情況不要著急。下面打印所有字體的一個(gè)方法.
for (NSString *familyName in [UIFont familyNames]) {
NSLog(@"familyName:%@", familyName);
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"fontName:%@", fontName);
}
}
你可以根據(jù)字體文件的命名去打印框里搜索,應(yīng)該也能搜到。這里雖然有些坑爹,但是我只能幫你們到這里了。
知道了fontName,我們就可以用下面的方法設(shè)置字體了。
[UIFont fontWithName:@"XXXXXX" size:17]
是不是很簡單?下面我們介紹另一種方式。
2. 從服務(wù)器下載所需字體然后設(shè)置字體
基本思路
(1)從服務(wù)器上把字體文件下載到本地
(2)根據(jù)字體文件創(chuàng)建字體,獲取字體的fontName,設(shè)置字體
(1) 從服務(wù)器上把字體文件下載到本地
從服務(wù)器上下載文件,大家應(yīng)該都很熟悉了,這里不再贅述了。我這里使用了NSURLSessionDownloadTask,但是用注意字體的格式,例如.otf .ttf 等,千萬不要隨意命名,可能無法獲取到。
(2)根據(jù)字體文件創(chuàng)建字體,獲取字體的fontName,設(shè)置字體
這里我把核心打碼貼出來
/**
設(shè)置字體
@param path 這里的路徑是你存儲(chǔ)字體文件的路徑
@param size 字體的大小
@return 返回字體
*/
- (UIFont *)customFontWithPath:(NSURL *)path size:(CGFloat)size {
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)path);
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;
}
簡單的看一下效果
demo下載地址:傳送門,如有錯(cuò)誤歡迎大家指出,謝謝。如果對(duì)你有幫助請給個(gè)??鼓勵(lì)一下。