首先,在iOS中策橘,使用字體文件(網(wǎng)絡(luò)動(dòng)態(tài)下載或者copy到bundle的方式)并不難,只需要在使用前動(dòng)態(tài)加載就可以:
+ (void) loadCustomFont:(NSString*)fontFileName{
NSString *fontPath = [[NSBundle MainBundle] pathForResource:fontFileName ofType:nil];
if (!fontPath) {
NSLog(@"Failed to load font: %@", fontFileName);
return;
}
NSData *inData = [NSData dataWithContentsOfFile:fontPath];
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (!CTFontManagerRegisterGraphicsFont(font, &error)) {
CFStringRef errorDescription = CFErrorCopyDescription(error);
// NSLog(@"Failed to load font: %@", errorDescription);
CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);
}
但是本人就遇到了一個(gè)比較奇葩的情況丽已,有一個(gè)字體叫做Bebas Neue蚌堵,有book促脉,regular策州,bold,thin等類(lèi)型宫仗,但是動(dòng)態(tài)加載以后,雖然通過(guò)查詢font family啥的藕夫,能看到這些類(lèi)型孽糖,可是通過(guò)[UIFont fontWithName:@"BebasNeueBook" size:72]
獲取到的字體,并不是book字體毅贮,而是比較粗的字體办悟,這就尷尬了,怎么才能獲取到正確的字體呢滩褥?StackOverflow無(wú)果病蛉,自己嘗試,發(fā)現(xiàn)了一個(gè)叫做UIFontDescriptor的東東瑰煎,這個(gè)類(lèi)可以很詳細(xì)的描述字體信息铺然,于是曲線救國(guó),通過(guò) [UIFont fontWithDescriptor:[UIFontDescriptor fontDescriptorWithName:@"BebasNeueBook" size:72] size:72]
就可以正確加載這個(gè)字體了酒甸,最后看起來(lái)效果棒棒噠魄健。
為了方便使用,我封裝了一個(gè)方法:
- (UIFont*)loadFontWithName:(NSString*)fontName size:(float)size{
return [UIFont fontWithDescriptor:[UIFontDescriptor fontDescriptorWithName:fontName size:size] size:size];
}