31

GitHub - EFPrefix/EFIconFont: Yet another stupid wrapper of icon font.

 5 years ago
source link: https://github.com/EFPrefix/EFIconFont
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

68747470733a2f2f6170692e7472617669732d63692e6f72672f45465072656669782f454649636f6e466f6e742e7376673f6272616e63683d6d6173746572 68747470733a2f2f696d672e736869656c64732e696f2f636f636f61706f64732f762f454649636f6e466f6e742e7376673f7374796c653d666c6174 68747470733a2f2f696d672e736869656c64732e696f2f636f636f61706f64732f702f454649636f6e466f6e742e7376673f7374796c653d666c6174 68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c616e67756167652d73776966742d6f72616e67652e737667 68747470733a2f2f636f6465626561742e636f2f6261646765732f34636261646334642d653866392d346635622d386565352d363736626136333830333833 68747470733a2f2f696d672e736869656c64732e696f2f636f636f61706f64732f6c2f454649636f6e466f6e742e7376673f7374796c653d666c6174 68747470733a2f2f696d672e736869656c64732e696f2f62616467652f747769747465722d4045797265467265653737372d626c75652e7376673f7374796c653d666c6174 68747470733a2f2f696d672e736869656c64732e696f2f62616467652f776569626f2d4045797265467265652d7265642e7376673f7374796c653d666c6174 68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d616465253230776974682d253343332d6f72616e67652e737667

An ordinary iconfont cocoaapods package helps you to use iconfont more easily in your project, in Swift.

中文介绍

Preview

1 2 3 4

Example

To run the example project manually, clone the repo, demo is in the 'Example' folder, then open EFIconFont.xcworkspace with Xcode and select the target you want, run.

Or you can run the following command in terminal:

git clone [email protected]:EFPrefix/EFIconFont.git; cd EFIconFont/Example; pod install; open EFIconFont.xcworkspace

Requirements

  • iOS 8.0+
  • Swift 4.2+

Installation

EFIconFont is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'EFIconFont'

You can get built-in iconfonts with subspecs, for example you will get icons of AntDesign and FontAwesome by the following way:

pod 'EFIconFont', :subspecs => ['AntDesign', 'FontAwesome']

You can also choose to get all built-in packs by using Complete subspec:

pod 'EFIconFont', :subspecs => ['Complete']

Then, run the following command:

pod install

Use

1. Core

Objects that implement the EFIconFontProtocol protocol can transform themselves into NSAttributedString or UIImage, which is as follows:

public protocol EFIconFontProtocol {

    // `name` is not necessarily equal to .ttf file name
    var name: String { get }

    // `path` is path of .ttf file
    var path: String { get }

    // `attributes` is style of icon
    var attributes: [NSAttributedString.Key : Any] { set get }

    // `unicode` is unique identifier of particular icon
    var unicode: String { get }
}
  • name: Font name, not necessarily equal to .ttf file name, you can use BirdFont to see the Name attribute of the file;
  • path: Filepath of .ttf file, usually you can get it through code like Bundle.main.path(forResource: name, ofType: "ttf")(If filename is same as name, you can use the default implementation and do not need to implement this property);
  • attributes: Attributes of icon(You can use the default implementation and do not need to implement this property);
  • unicode: The unique unicode of an icon.

Objects that implement the protocol can be converted to strings and images by calling the following methods, you can also change the foreground color and size:

// MARK:- String
func attributedString(size fontSize: CGFloat, attributes: [NSAttributedString.Key : Any]?) -> NSAttributedString?
func attributedString(size fontSize: CGFloat, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> NSAttributedString?

// MARK:- Image
func image(size fontSize: CGFloat, attributes: [NSAttributedString.Key : Any]?) -> UIImage?
func image(size fontSize: CGFloat, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> UIImage?
func image(size imageSize: CGSize, attributes: [NSAttributedString.Key : Any]?) -> UIImage?
func image(size imageSize: CGSize, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> UIImage?

2. Built-in iconfont packs

This pod has integrated some free resources in the subspecs, like AntDesign and FontAwesome. It can be imported by who need to use it. The usage methods are as follows, you can get a return value of EFIconFontProtocol:

EFIconFontAntDesign.addteam

You can use the object which follow EFIconFontProtocol to get NSAttributedString and UIImage:

EFIconFontAntDesign.addteam.attributedString(size: 24)
EFIconFontFontAwesomeBrands.adobe.attributedString(size: 32, foregroundColor: UIColor.white, backgroundColor: UIColor.green)
EFIconFontFontAwesomeRegular.addressBook.image(size: 24, foregroundColor: UIColor.red)
EFIconFontFontAwesomeSolid.alignLeft.image(size: CGSize(width: 36, height: 48), foregroundColor: UIColor.white)

You can also get all icons of a EFIconFontCaseIterableProtocol object with type [String : EFIconFontProtocol] by the following code:

EFIconFont.antDesign.dictionary

PS: Although the libraries below are all free, please make sure that your way of using the icon conforms to the original author's protocol specification:

Name Version Count File Size Description License Preview AntDesign

557 127KB Ant Design MIT iconfont.cn ElusiveIcons 2.0.0 304 53KB Elusive Icons OFL elusiveicons.com FontAwesome 5.8.1 1516 356KB Font Awesome Font Awesome Free License fontawesome.com Ionicons 4.5.5 696 143KB Ionicons MIT ionicons.com MaterialIcons 3.0.1 932 128KB Google's material design icons Apache-2.0 material.io

3. Extend custom packs

(1) Import Font File

Drag the .ttf file of the icon library into the Xcode project and ensure that the Copy Bundle Resources list in Build Phases contains this font file (It will be included by default, just check it).

In addition, the file will be loaded at runtime, do not need to add it to the Fonts provided by application item in the Info.plist file.

(2) Implement EFIconFontCaseIterableProtocol

By making a implementation of EFIconFontCaseIterableProtocol you can get your custom iconfont pack object, demo in this project demonstrates customization with GitHub's Octicons as an example:

import EFIconFont

public extension EFIconFont {
    public static let octicons = EFIconFontOcticons.self
}

extension EFIconFontOcticons: EFIconFontCaseIterableProtocol {
    public static var name: String {
        return "octicons"
    }
    public var unicode: String {
        return self.rawValue
    }
}

public enum EFIconFontOcticons: String {
    case thumbsup = "\u{e6d7}"
    case unverified = "\u{e6d6}"
    case unfold = "\u{e6d5}"
    case verified = "\u{e6d4}"
    // ...
}

(3) Call

Same as Built-in iconfont packs above:

EFIconFontOcticons.thumbsup

(4) Attention

The Octicons icon library in this project is owned by GitHub. This is only a demonstration, do not use it in any situation that violates the specifications set by its owner:

Name Version Count File Size Description License Preview Octicons 8.4.2 184 34KB GitHub‘s icons GitHub Logos and Usage octicons.github.com

4. Other

Usage of some iconfont resource sites:

Author

EyreFree, [email protected]

License

68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f7468756d622f662f66382f4c6963656e73655f69636f6e2d6d69742d38387833312d322e7376672f31323870782d4c6963656e73655f69636f6e2d6d69742d38387833312d322e7376672e706e67

EFIconFont is available under the MIT license. See the LICENSE file for more info.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK