IconFont

IconFont 也叫字体图标,顾名思义,就是字体做的图标。受到近些年扁平化设计 的影响,越来越多的图标都开始使用 icon font。
IconFont技术起源于Web领域的Web Font技术。随着时间的推移,网页设计越来越漂亮。但是电脑预装的字体远远无法满足设计者的要求,于是Web Font技术诞生了。一个英文字库并不大,通过网络下载字体,完成网页的显示。有了Web Font技术,大大提升了设计师的发挥空间。

优点

  • 自由的变化大小,且不会模糊
  • 比图片小,加载快
  • 方便更改颜色大小,图片复用
  • 减少切图,一图多用提高开发效率

缺点

  • 只能被渲染成单色或者CSS3的渐变色
  • 创作自已的字体图标很费时间,重构人员后期维护的成本偏高。

第二点,目前阿里矢量图的图标基本上可以完成大部分要求,所以相对来说还是不会那么坑。

iOS端使用

iconfont字体库的创建

  1. 登录阿里矢量图库,挑选你需要的icon,并把它们加入购物车,然后添加到项目中。

  2. 点击购物车按钮,然后把购物车中的图标添加到项目中,方便以后管理,如果没有项目可以自己新建一个项目。

  3. 完成过后就可以看到我们刚刚添加好的项目图标啦

Iconfont字体库导入iOS工程

  1. 现在刚刚的图标库到本地,找到IconFont.ttf导入到工程中

  1. 在Info.plist中添加Fonts provided by application,名字就是我们刚刚导入的iconFont.ttf

代码调用

给UIFont添加一个扩展

import UIKit
import Foundation
///Font扩展
public extension UIFont {///初始化:iconFontclass func iconfont(ofSize: CGFloat) -> UIFont? {//iconFont,对应我们导入的名字,size,就是图标大小return UIFont.init(name: "iconFont", size: ofSize)}
}

写一个enum,把我们的icon做一个映射

public enum Iconfont: String {//Tabbar Icon  case TabHome = "\u{e602}"case TabMine = "\u{e606}"case TabSearch = "\u{e6d0}"case TabCart = "\u{e77e}"//Nav Icon  case NavBack = "\u{e601}"case NavClose = "\u{e607}"case NavRight = "\u{e600}"case NavAsk = "\u{e8b0}" ///等等,自己根据需要添加
}

UILabel的使用

let label = UILabel.init(frame: CGRect.init(origin: CGPoint.init(x: 100, y: 100), size: CGSize.init(width: 30, height: 30)))
label.font = UIFont.iconfont(ofSize: 30)
label.text = Iconfont.TabHome.rawValue
label.textColor = UIColor.red //icon的颜色
view.addSubview(label)

同样的我们为了方便使用也可以给UILabel写一个扩展如下

public extension UILabel {class func iconFont(from iconFont: Iconfont, size: CGFloat = 25, textColor: UIColor = .black) -> UILabel {let label = UILabel.init()label.text = iconFont.rawValuelabel.textAlignment = .centerlabel.font = UIFont.iconfont(ofSize: size)label.textColor = textColorreturn label}
}

把IconFont,用UIImage显示,给UIImage添加一个扩展

import UIKitpublic extension UIImage
{convenience init(from font: Iconfont, textColor: UIColor = .black, backgroundColor: UIColor = .clear, size: CGSize) {let drawText = fontlet paragraphStyle = NSMutableParagraphStyle()paragraphStyle.alignment = NSTextAlignment.centerlet fontSize = min(size.width / 1.28571429, size.height)let attributes: [NSAttributedString.Key: Any] = [.font: UIFont.iconfont(ofSize: fontSize), .foregroundColor: textColor, .backgroundColor: backgroundColor, .paragraphStyle: paragraphStyle]let attributedString = NSAttributedString(string: drawText.rawValue, attributes: attributes)UIGraphicsBeginImageContextWithOptions(size, false , UIScreen.main.scale)attributedString.draw(in: CGRect(x: 0, y: (size.height - fontSize) * 0.5, width: size.width, height: fontSize))let image = UIGraphicsGetImageFromCurrentImageContext()UIGraphicsEndImageContext()if let image = image {self.init(cgImage: image.cgImage!, scale: image.scale, orientation: image.imageOrientation)} else {self.init()}}static func icon(from font: Iconfont, iconColor: UIColor, imageSize: CGSize, ofSize size: CGFloat) -> UIImage{let drawText = font.rawValueUIGraphicsBeginImageContextWithOptions(imageSize, false, UIScreen.main.scale)let paragraphStyle = NSMutableParagraphStyle()paragraphStyle.alignment = NSTextAlignment.centerdrawText.draw(in: CGRect(x:0, y:0, width:imageSize.width, height:imageSize.height), withAttributes: [.font: UIFont.iconfont(ofSize: size), .paragraphStyle: paragraphStyle, .foregroundColor: iconColor])let image = UIGraphicsGetImageFromCurrentImageContext()UIGraphicsEndImageContext()return image!}
}

调用如下

//方法一:
UIImage.init(from: iconFont, textColor: .black, size: CGSize.init(width: 25, height: 25))
//方法二:
UIImage.icon(from: iconFont, iconColor: .black, imageSize: CGSize.init(width: 25, height: 25), ofSize: 25)

UIButton的使用

UIbutton的使用,无非就是,给UIButton,添加title或者是image,UIButton中对应的titleLabel,更改相关属性就可以啦。代码省略。

总结

自定义IconFont的在iOS,swift代码应用基本就这些,如果你不直接看效果的话,可以现在如下代码Demo,完整的icon,在下载下来的Font文件夹中可以自行查看

SwiftIconFontDemo

Swift之使用自定义IconFont相关推荐

  1. Android神技之 使用SVG以及自定义IconFont字体库

    Android神技之 使用SVG以及自定义IconFont字体库 简介 Google在Android 5.X中增加了对SVG矢量图形的支持. SVG是什么 SVG 指可伸缩矢量图形 (Scalable ...

  2. Swift之Codable自定义解析将任意数据类型解析为想要的类型

    一.前言 大多数现代应用程序的共同点是,它们需要对各种形式的数据进行编码或解码.无论是通过网络下载的 Json 数据,还是存储在本地的模型的某种形式的序列化表示形式,对于几乎无任何 Swift 代码库 ...

  3. ios swift 纯代码自定义view(控件) XYswitchView

    文章目录 1.截图 2.代码 2.1 XYswitchView.swift 2.2 LoginVC.swift 3.参考博客 1.截图 2.代码 2.1 XYswitchView.swift impo ...

  4. swift 相册的自定义

    用 swift写的相册自定义,将相册里面的所有图片取出,然后在自定义的页面显示,用这个方法可以写相册图片的多张选择,相册的样式自定义. 代码部分: import UIKit import Photos ...

  5. Swift之SwiftUI自定义star rating评分组件

    SwiftUI 让创建自定义 UI 组件变得非常容易,因为它们实际上只是一些带有 @Binding 的视图供我们阅读. 为了演示这一点,我们将构建一个 star rating view,让用户通过点击 ...

  6. Swift 3DTouch开发 自定义ShortcutItems

    3DTouch的分享菜单是上架后系统自动加上的,其他的菜单需要我们自定义. 1.定义菜单项Model import Foundationenum ShortcutItem {case scancase ...

  7. Ant Design Pro 使用自定义iconfont图标,改变导航栏的图标

    Ant Design Pro 使用iconfont上的图标有两种方法: 1.加载在线图标 创建一个项目(图标的前缀一定要设置为:icon-) 创建远程连接 复制代码,找到ant design pro项 ...

  8. Swift 使用xib自定义UITableViewCell

    使用xib自定义tableviewCell看一下效果图 1.自定义列 新建一个xib文件 carTblCell,拖放一个UITableViewCell,再拖放一个图片和一个文本框到tableviewc ...

  9. Swift 高德地图自定义大头针自定义气泡

    自定义大头针和自定义气泡的代码官方文档上都写的很详细,我这里不再记录,这篇主要记录的是自定义气泡上面有一个按钮,点击按钮响应对应事件的场景,效果如下: 上面的车是自定义的大头针,点击大头针弹出自定义气 ...

最新文章

  1. iOS蓝牙开发---CoreBluetooth[BLE 4.0] 初级篇[内附Demo地址]
  2. SKChoosePopView 一个HUD风格的可定制化选项弹窗的快速解决方案
  3. 关于不同的MySQL复制解决方案概述
  4. LoadRunner 11.0 - 安装破解(个人试用成功)
  5. Android开发工程师面试指南
  6. [BX]和loop指令03 - 零基础入门学习汇编语言25
  7. iBeacon 初探
  8. mysql返回行数_如何计算MySQL查询返回的行数?
  9. Codeforces Round #573 (Div. 2) C. Tokitsukaze and Discard Items
  10. 每日一句20191126
  11. A4排成A3双面打印怎么操作
  12. 一般格式 | 分离变量法(三)| 偏微分方程(十五)
  13. csdn前200的大牛
  14. 软件项目管理(第二版 宁涛)问答题(个人背诵)
  15. C语言——整数直角三角形
  16. 软件设计的不同模型:瀑布式、快速原型法以及迭代式
  17. [Git]git命令
  18. python 调用百度地图api 实现批量经纬度转换为实际省市地点(api调用,json解析,mysql读取与写入)
  19. class-validator中文教程
  20. 连续生产情况下 单向测径仪连续测量更优吗?

热门文章

  1. C++ MessageBox的教程
  2. 【阅读笔记 EMNLP2020】《Message Passing for Hyper-Relational Knowledge Graphs》
  3. springboot 使用 @Scheduled注解定时任务, 方法传参解决办法
  4. ckeditor上传图片示例
  5. 有一台电脑可以做那些副业
  6. FlappyBird开发总结(七)—— GameOver计分板
  7. service层加需要加锁吗_面试官:了解乐观锁和悲观锁吗?
  8. 让星星⭐月亮告诉你,计算机组成(CPU、内存、存储设备、输入设备、输出设备、通信设备)
  9. 【闲聊杂谈】一篇给你讲清楚JVM调优的本质
  10. H3C QOS流量均衡