欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

图标字体 icon font iconfont

图标字体(IconFont)制作

 

图标字体(IconFont)介绍

图标字体(IconFont)现在越来越被广泛使用,大大提高了网页的多样化,解决了视网膜屏幕失真的问题。 据说微软从IE4开始支持的这个私有方法(@font-face),后来W3在CSS2中也引入这个方法,但是后来CSS2.1又被删除了,真是遗憾。直到CSS3,又一次引入,这真是个好消息。
详细见:http://www.w3.org/TR/css3-fonts/

不过经常会被问到,移动端用没问题,PC上IE可以了,我可以负责任的说:当然可以。原因上面说了,@font-face最初是微软IE里的私有方法,所以从IE4开始已经支持(我没测过哦),不过现在网站最低支持到IE6而且IE6已被优雅降级到可以正常浏览、使用网站,UI还原度已不值得花大力度去做兼容了,况且在实际项目中IE6中使用确实是没问题的。

一句话,现在可以放心大胆的在PC、移动端使用图标字体(Iconfont)了。
了解更多可看国内最大最全的适量图标库阿里IconFont网站。

图标字体(Iconfont)制作

一. IcoMoon

这个教程一搜一大把,是很方便快捷的一种方式,提供上传、编辑或者选择IcoMoon-Free下载可以直接拿来用了。
网址:https://icomoon.io/app/

二. 阿里IconFont

和IconFont提供类似功能
网址:http://iconfont.cn/

上面两种方法优点是方便快捷,但或许有时候并不能满足你的个性化需求。
比如:仅需要替换一个已经有图标并保持字符代码不变或者更多个性化需求的,或许你可以看看下面的方法。

三. 字体编辑软件制作

  1. 首先准备一下软件,除了PS,AI,还需要High-Logic FontCreator。 FontCreator 是一个强大的字体编辑软件。 官网下载:http://www.high-logic.com/font-editor/fontcreator/download.html
  2. PS导出图标路径到AI (图标一定要是路径)

  3. AI打开导出的图标路径(打开有可能是空白,可以全选找到并添上颜色)

  4. 打开FontCreator,新建或打开字体

  5. 添加图标字形或者双击要编辑的图标字形

  6. 从AI里复制图标路径到FontCreator里,调整大小位置
    可参考(http://mux.alimama.com/posts/1025)

  7. 导出字体,只有TTF和WOFF两种格式

  8. EverythingFonts把TTF转换SVG和EOT, TTF2SVG TTF2EOT

  9. 好了,收工。

感谢亲的光临,如果亲感觉这篇文章还不错或对亲有帮助,欢迎在下面“推荐”点个赞或者随意金额打赏,亲的支持是我最大的动力。

  • 支付宝扫一扫支付宝扫一扫打赏
  •  
  • 微信扫一扫微信扫一扫打赏
 


在iOS项目中,一般对图片资源要求有@2x@3x两套,以适配不同分辨率的设备。对于有换肤需求的APP来说,还需要多套图来匹配不同的主题。这样不但无形中增加了开发者和设计者的工作量,而且会增大APP的体积。为了释放开发者、设计者的双手以及给APP“减重”,iconfont被引入到iOS开发中来。

iconfont,从字面上就能理解它就是字体,让开发者像使用字体一样使用图标。

制作iconfont

生成iconfont需要矢量图。一些网站提供生成iconfont的服务,比如icomoonFontello阿里巴巴矢量图标库easyicon提供大量优秀的矢量图。 
icomoon和fontello均可以通过导入SVG图标或者选择网站自身提供的图标来生成iconfont。值得一提的是,icomoon还可以生成PNGPDFCSH等格式。本文以icomoon作为生成工具。 
在生成的文件夹中,可以找到扩展名为.ttf的字体集文件。

配置iconfont

.ttf文件添加到Xcode项目中去,在Build Phases配置中确保可以看到导入的文件。

之后在项目的info.plist中,添加Fonts provided by application字段。这字段是一个数组,可以为项目添加多个字体集。

这样就可以在Xcode中使用导入的字体了。

可以通过代码来验证iconfont是否真的可以使用了。

    for (NSString * family in [UIFont familyNames]) {
        NSLog(@"familyNames:%@", family);
        for (NSString * name in [UIFont fontNamesForFamilyName:family]) {
            NSLog(@"  name: %@",name);
        }
    }

可以在控制台看到和.ttf文件名一样的输出。

使用iconfont

在使用之前,让我们回到生成的文件夹中,在和.ttf的同一个目录下,可以找到同名的.svg文件。这是一个xml文件,每一个<glyph>标签对应一个矢量图标,包含它对应的unicode代码和名称。我们就是通过这个代码在Xcode中使用这些图标。这些代码是&#xXXXX格式的,在Xcode中需要转换成\UXXXXXXXX格式的。可以使用在线编码工具进行转译。

<glyph unicode="&#xe900;" glyph-name="home" d="M1024 369.556l-512 397.426-512-397.428v162.038l512 397.426 512-397.428zM896 384v-384h-256v256h-256v-256h-256v384l384 288z" />

图标对应的unicode为,名称为home。

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 300, 50)];
label.font = [UIFont fontWithName:@"icomoon" size:35];
label.text = @"\U0000E900";
label.textColor = [UIColor redColor];
[self.view addSubview:label];

这样,在运行之后,就可以看到一个红色的图标。

一般情况下,iconfont多用于UIImage类。可以写一个UIImage+iconfont的分类来实现icon作为图片的功能。

+ (UIImage*)imageWithIcon:(NSString*)iconCode inFont:(NSString*)fontName size:(NSUInteger)size color:(UIColor*)color {
    CGSize imageSize = CGSizeMake(size, size);
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, [[UIScreen mainScreen] scale]);
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, size, size)];
    label.font = [UIFont fontWithName:fontName size:size];
    label.text = iconCode;
    if(color){
        label.textColor = color;
    }
    [label.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext();
    return retImage;
}

总结

优点

  • 可以让开发者在代码中直接对图标进行样式的修改,而且不需要考虑分辨率适配的问题。

缺点

  • 维护起来比较麻烦。每一次生成.ttf文件包含的图标个数是一定的,如果需要添加,要将selection.json文件导入到生成器中,添加新的图标,再生成新的.ttf。

  • 在代码中,使用宏定义将unicode转换成有意义的字符串,更方便使用和维护。

    来自 https://segmentfault.com/a/1190000004300281


普通分类: