Use iconfont by Enum.
Support custom iconfont (you can make a custom iconfont from iconfont.cn、iconmoon)
Support open source icon :
use_frameworks!
pod 'JustIconFont'
# support to FontAwesome、Iconic、Ionicons、MaterialIcons、Octicons
pod 'JustIconFont/FontAwesome'
pod 'JustIconFont/Iconic'
pod 'JustIconFont/Ionicons'
pod 'JustIconFont/MaterialIcons'
pod 'JustIconFont/Octicons'
Every icon can present as UIImage or NSAttributedString.
We can create UIImage with fontSize or imageSize. One is created according to the size of the font. Another is created according to the size of the image.
// NSAttributedString
let attributedString = NSAttributedString.iconFont(Octicons.logoGithub, fontSize: 25)
label.attributedText = attributedString
button.setAttributedTitle(title: attributedString, for: .normal)
let attributes = NSAttributedString.attributes(with: Octicons.logoGithub, fontSize: 30)
tabBarItem.title = Octicons.logoGithub.unicode
tabBarItem.setTitleTextAttributes(attributes, for: .normal)
barButtonItem.title = Octicons.logoGithub.unicode
barButtonItem.setTitleTextAttributes(attributes, for: .normal)
// UIImage with fontSize. UIImage size is 39 * 30
let image = UIImage.iconFont(Octicons.logoGithub, fontSize: 30)
imageView.image = image
button.setImage(image, for: .normal)
tabBarItem.image = image
tabBarItem.selectedImage = image
barButtonItem.image = image
// UIImage with imageSize. UIImage size is 30 * 30
// image will scaled to fit with fixed aspect.
let image = UIImage.iconFont(Octicons.logoGithub, imageSize: CGSize(width: 30, height: 30))
imageView.image = image
There are some extensions for UIKit.
// use FontAwesome Brands
label.iconFont(size: 25, icon: FontAwesome.Brands.github)
label.iconFont(size: 25, icon: FontAwesome.Brands.github, color: .red)
// use Octicons
imageView.iconFont(Octicons.logoGithub) // imageSize = imageView.frame.size
imageView.iconFont(Octicons.logoGithub, fontSize: 30)
imageView.iconFont(Octicons.logoGithub, imageSize: CGSize(width: 30, height: 30))
// if color is nil, icon's color is depend on `tintClor`
button.iconFont(Octicons.logoGithub, fontSize: 30)
button.iconFont(Octicons.logoGithub, fontSize: 30, color: .lightGray, for: .normal)
button.iconFont(Octicons.logoGithub, fontSize: 30, color: .red, for: .highlighted)
// use MaterialIcons
// if color is nil, icon's color is depend on `tintClor`
barButtonItem.iconFont(size: 25, icon: MaterialIcons.book)
barButtonItem.iconFont(size: 25, icon: MaterialIcons.book, color: color)
// use FontAwesome Solid
tabBarItem.title = "solid"
// if color is nil, icon will present the default color
tabBarItem.iconFont(FontAwesome.Solid.addressBook, fontSize: 25)
tabBarItem.iconFont(FontAwesome.Solid.addressBook, fontSize: 25, color: .red, for: .selected)
// use FontAwesome Regular
rightTabBarItem.title = "regular"
rightTabBarItem.iconFont(FontAwesome.Regular.addressBook, fontSize: 25)
rightTabBarItem.iconFont(FontAwesome.Regular.addressBook, fontSize: 25, color: .red, for: .selected)
Custom IconFont should implement protocol IconFontType
public enum MyIconFont: String {
case feedback = "\u{e656}"
case search = "\u{e651}"
case home = "\u{e64f}"
case clock = "\u{e648}"
case like = "\u{e643}"
case shoppingCart = "\u{e63f}"
}
/// Implement protocol IconFontType
public extension MyIconFont: IconFontType {
/// Font family name. The fully specified name of the font.
/// This name incorporates both the font family name and
/// the specific style information for the font.
var name: String {
return "iconfont"
}
/// path of TTF file
var filePath: String? {
return Bundle.main.path(forResource: "iconfont", ofType: "ttf")
}
var unicode: String {
return self.rawValue
}
}
/// There is another way to setup custom iconfont
/// If your TTF file's name is equel to font family name
/// you just need to implement protocol IconFontEnumType and return font name
public extension MyIconFont: IconFontEnumType {
var name: String {
return "iconfont"
}
}
label.iconFont(MyIconFont.clock, fontSize: 25)
label.iconFont(MyIconFont.feedback, fontSize: 30)
label.iconFont(MyIconFont.shoppingCart, fontSize: 35)