iOS設定字型的三種方式
有時候專案需要顯示一些非系統的字型達到一些UI的效果,目前設定字型有三種方式,預設方式、bundle方式,coreText方式。
1 預設方式
這種方式就是正常的字型設定方式
label.font = [UIFont fontwithname:@”Blazed” size:42];
至於第一個引數的名字,可以通過以下方法輸出所有字型名字列表
[UIFont familyNames]
只要名字列表中存在的,都可以用這種方式關聯到對應的字型上。
2 繫結自定義的字型包
其實第二種方式和第一種方式在程式碼上是一樣的,依舊是通過名字設定字型
label.font = [UIFont fontwithname:@”Blazed” size:42];
只是要想使用往上下載的字型檔案,先將字型檔案加到系統的字型目錄中。
具體操作如下:
1 下載目標的字型檔案並新增到工程中,名字為fontTest.ttf
2 在info.plist中,新增 Fonts provided by application 項, 開啟對應的陣列,可以設定多個字型,在Item0中 輸入fontTest.ttf。
這個時候再執行[UIFont familyNames],新加的字型就存在於列表中,那麼直接設定名字就可以設定上字型了。
3 通過CoreText繫結字型
第二種方式基本基本就可以滿足大部分的需求,只有一個問題,就是字型包大小不一定,幾十兆到幾百兆不等,隨著其他資源包一起打進ipa會讓包變得很大,尤其是有的業務需要很多的字型包,那麼肯定是需要動態網路下載的,這個動態下載的字型檔案目前蘋果開放的介面是無法動態新增配置資訊到info.plist的。這個時候就需要CoreText介面動態繫結到記憶體中。
當然,這裡需要引入CoreText框架
#import < CoreText/CoreText.h> +(UIFont*)doGetCustomFontWithPath:(NSString*)path size:(CGFloat)size { if (!path) { return [UIFont systemFontOfSize:21]; } //NSString *path2 = [path stringByAppendingString:@"1"]; NSURL *fontUrl = [NSURL fileURLWithPath:path]; //[[NSFileManager defaultManager] copyItemAtPath:path toPath:path2 error:nil]; 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; }