iconfont 技術的主要是將圖標轉化為字體來減少應用體積。如需在項目中使用iconfont技術,圖標矢量圖一開始都應合並轉化為字體庫。
優點:
- 減小體積,字體文件比圖片要小
- 圖標保真縮放,解決2x/3x乃至將來的nx圖問題
- 方便更改顏色大小,圖片復用
缺點:
- 只適用於純色icon
- 使用unicode字符難以理解
- 需要維護字體庫
字體管理
字體管理方式分為兩種:在線管理(
iconfont.cn)和FontForge工具。
字體庫生成
這里推薦兩個比較好用的網站iconmoon和iconfon,個人在做網頁的時候,經常會在iconmoon上制作字體圖標。如果設計師給你了字體庫最好,如果給你的是 .svg 文件,就需要自己去轉為字體庫了。這里以iconmoon為例制作字體庫,iconmoon需要翻牆。
1、導入設計師給的 .svg 文件

2、點擊Generate Font 生成字體庫,如下圖

3、打開下載的文件夾,如下圖

4、將.ttf 的字體庫,導入項目中,要確保在下圖路徑中可以看到字體庫

5、在plist文件中,添加字段Fonts provided by application並在該字段下添加GWH_search.ttf。工程中便可使用字體庫了。

6、打開demo.html,可以看到圖標字體的Unicode編碼

使用的時候只需要將圖標對應的Unicode編碼轉化為text字符串即可,轉化方式’\U0000 + 對應編碼’
示例:
- [_textLabelfontWithIcon:@"\U0000e900"size:14color:[UIColorredColor]];
UIImageView *imgV = [[UIImageViewalloc] initWithFrame:CGRectMake(100, 100, 30, 30)];
[imgV setImage:kImageFont(@"\U0000e900", 17, [UIColorgreenColor])];
[self.viewaddSubview:imgV];
UIButton *iconBtn = [[UIButtonalloc] initWithFrame:CGRectMake(100, 150, 30, 30)];
[iconBtn setTitleWithIcon:@"\U0000e900"size:14color:[UIColormagentaColor]];
[self.viewaddSubview:iconBtn];
效果:

分類:
UIImage+IconFont.m
- + (UIImage *)imageWithIcon:(NSString *)iconCode size:(NSUInteger)size color:(UIColor *)color {
CGSize imageSize = CGSizeMake(size, size);
// opaque:NO 不透明
UIGraphicsBeginImageContextWithOptions(imageSize, NO, [[UIScreenmainScreen] scale]);
UILabel *label = [[UILabelalloc] initWithFrame:CGRectMake(0, 0, size, size)];
label.font = [UIFontfontWithName:@"GWH_search"size:size];
label.text = iconCode;
if(color){
label.textColor = color;
}
[label setNumberOfLines:0];
label.textAlignment = NSTextAlignmentCenter;
// 渲染自身
[label.layerrenderInContext:UIGraphicsGetCurrentContext()];
UIImage *retImage = [UIGraphicsGetImageFromCurrentImageContext() imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIGraphicsEndImageContext();
return retImage;
}
UIButton+IconFont.m
- - (void)setTitleWithIcon:(NSString *)iconCode size:(NSInteger)size color:(UIColor *)color {
[selfsetTitle:iconCode forState:UIControlStateNormal];
self.titleLabel.font = [UIFontfontWithName:@"GWH_search"size:size];
if (color) {
[selfsetTitleColor:color forState:UIControlStateNormal];
}
}
UILabel+IconFont.m
- - (void)fontWithIcon:(NSString *)iconCode size:(NSInteger)size color:(UIColor *)color {
self.font = [UIFontfontWithName:@"GWH_search"size:size];
self.text = iconCode;
if (color) {
self.textColor = color;
}
}
參考鏈接: