获取 icofont
可以在 icofont.com 下载到 icofont.ttf
,里面包含了很多图标。
把下载回来的 icofont.ttf
拖到项目里,或者新建一个 fonts.bundle
用来放字体资源。
在 APP 启动的时候注册字体,注册之后就能在 APP 里全局使用了,使用方法和使用系统字体一样。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSBundle *fontsBundle = [NSBundle bundleWithPath:[NSBundle.mainBundle pathForResource:@"fonts" ofType:@"bundle"]];
NSURL *fontPathUrl = [fontsBundle URLForResource:@"icofont" withExtension:@"ttf"];
CTFontManagerRegisterFontsForURL((CFURLRef)fontPathUrl, kCTFontManagerScopeProcess, NULL);
return YES;
}
给 UIFont 添加一个 icofont 字体的 fallback 扩展,指定查找顺序:icofont > 系统字体
@implementation UIFont (icofont)
+ (UIFont *)fontOfSize:(CGFloat)fontSize {
UIFont *systemFont = [UIFont systemFontOfSize:fontSize];
NSMutableDictionary *attrs = NSMutableDictionary.dictionary;
attrs[UIFontDescriptorNameAttribute] = @"icofont";
attrs[UIFontDescriptorCascadeListAttribute] = @[[UIFontDescriptor fontDescriptorWithName:systemFont.fontName size:fontSize]];
UIFontDescriptor *fd = [UIFontDescriptor fontDescriptorWithFontAttributes:attrs];
return [UIFont fontWithDescriptor:fd size:fontSize];
}
+ (UIFont *)boldFontOfSize:(CGFloat)fontSize {
UIFont *systemFont = [UIFont boldSystemFontOfSize:fontSize];
NSMutableDictionary *attrs = NSMutableDictionary.dictionary;
attrs[UIFontDescriptorNameAttribute] = @"icofont";
attrs[UIFontDescriptorCascadeListAttribute] = @[[UIFontDescriptor fontDescriptorWithName:systemFont.fontName size:fontSize]];
UIFontDescriptor *fd = [UIFontDescriptor fontDescriptorWithFontAttributes:attrs];
return [UIFont fontWithDescriptor:fd size:fontSize];
}
+ (UIFont *)italicFontOfSize:(CGFloat)fontSize {
UIFont *systemFont = [UIFont italicSystemFontOfSize:fontSize];
NSMutableDictionary *attrs = NSMutableDictionary.dictionary;
attrs[UIFontDescriptorNameAttribute] = @"icofont";
attrs[UIFontDescriptorCascadeListAttribute] = @[[UIFontDescriptor fontDescriptorWithName:systemFont.fontName size:fontSize]];
UIFontDescriptor *fd = [UIFontDescriptor fontDescriptorWithFontAttributes:attrs];
return [UIFont fontWithDescriptor:fd size:fontSize];
}
@end
测试字体效果
[text insertString:@"\U0000ef71" atIndex:0];
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:text
attributes:@{
NSFontAttributeName: [UIFont fontOfSize:15],
NSForegroundColorAttributeName: RGB(0x515151)
}];
_textLabel.attributedText = attrString;