网站首页 > 开源技术 正文
在iOS项目中,一般对图片资源要求有@2x,@3x两套,以适配不同分辨率的设备。对于有换肤需求的APP来说,还需要多套图来匹配不同的主题。这样不但无形中增加了开发者和设计者的工作量,而且会增大APP的体积。为了释放开发者、设计者的双手以及给APP“减重”,iconfont被引入到iOS开发中来。
iconfont,从字面上就能理解它就是字体,让开发者像使用字体一样使用图标。
制作iconfont
生成iconfont需要矢量图。一些网站提供生成iconfont的服务,比如icomoon和Fontello。阿里巴巴矢量图标库和easyicon提供大量优秀的矢量图。
icomoon和fontello均可以通过导入SVG图标或者选择网站自身提供的图标来生成iconfont。值得一提的是,icomoon还可以生成PNG,PDF,CSH等格式。本文以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文件,每一个标签对应一个矢量图标,包含它对应的unicode代码和名称。我们就是通过这个代码在Xcode中使用这些图标。这些代码是XXXX格式的,在Xcode中需要转换成\UXXXXXXXX格式的。可以使用在线编码工具进行转译。
图标对应的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转换成有意义的字符串,更方便使用和维护。
猜你喜欢
- 2025-03-26 推荐28个前端开发必备工具(专业的前端开发工具)
- 2025-03-26 收藏!UI与设计人员不得不去的几个免费图标下载网站,转!
- 2024-08-19 学习UI图标设计少不了这些方法(ui图标设计教程)
- 2024-08-19 CSS3中的字体图标iconfont(css中字体类型的代码)
- 2024-08-19 整理高质量的图标素材库和制作工具,建议收藏!
- 2024-08-19 如何在网页中使用 web 字体?(web中如何设置字体)
- 2024-08-19 图标制作工具分享(图标制作过程)
- 2024-08-19 这些月入上千的设计兼职平台,还不来看啊
欢迎 你 发表评论:
- 12-16怎么给电脑文件夹上锁(电脑文件夹怎么加密码)
- 12-16如何优化win10系统(win10系统怎么优化设置)
- 12-16cpu怎么超频步骤(cpu怎么超频步骤最快)
- 12-16截图快捷键怎么用(截图快捷键怎么用更省时)
- 12-16深度装机u盘启动(u深度装机版怎么做启动盘)
- 12-16联想售后服务站查询(联想售后维修网点查询)
- 12-16恢复大师软件(恢复大师软件安全吗)
- 12-16win10下载官网链接(windows10下载官网下载)
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)

本文暂时没有评论,来添加一个吧(●'◡'●)