iOS中如何使用iconfont圖標(biāo)實(shí)例詳解
1.什么是iconfont
iconFont拆開(kāi)來(lái)看,就是 Icon + Font,這樣估計(jì)大家應(yīng)該都能理解是什么,那兩者結(jié)合是什么呢?沒(méi)錯(cuò)!就是 IconFont !讓開(kāi)發(fā)者像使用字體一樣使用圖標(biāo)。如果自己不會(huì)做的話(huà),可以直接去阿里的iconfont圖標(biāo)庫(kù)下載自己需要的圖標(biāo)。
2.為什么要使用iconfont
在開(kāi)發(fā)項(xiàng)目時(shí),不可避免的會(huì)用到各種圖標(biāo),為了適配不同的設(shè)備,通常需要@2x和@3x兩套圖,例如說(shuō)我們tabBar上使用的圖標(biāo)。有些app有換膚的需要,還需要多套不同的圖來(lái)進(jìn)行匹配不同的主題。如果使用切圖,這對(duì)于設(shè)計(jì)和開(kāi)發(fā)來(lái)說(shuō)無(wú)疑是增加了工作量,而且ipa的體積也會(huì)增大。
使用iconfont的好處:
1. 減小ipa包的大小
2. 圖標(biāo)保真縮放,多設(shè)備適配一套圖解決問(wèn)題
3. 適應(yīng)換膚要求,使用方便。
3.怎么用iconfont
1. 首先去iconfont圖標(biāo)庫(kù)下載自己需要的圖標(biāo)。
簡(jiǎn)書(shū)里竟然gif大小限制的這么厲害,所以將動(dòng)圖放到項(xiàng)目里了,需要的在文末有g(shù)it地址

如圖我們可以選擇自己需要的icon加入到購(gòu)物車(chē),然后加入項(xiàng)目里,當(dāng)然你也可以直接在購(gòu)物車(chē)直接下載,但是這樣只是沒(méi)有修改icon為自己想要的樣式,加入項(xiàng)目中,你可以自己任意修改icon為自己想要的樣式。

注意:這里是下載代碼,這樣我們就可以在項(xiàng)目中直接使用
2.將下載下來(lái)的icon資源添加到自己的項(xiàng)目中。

我們所需要的就是這個(gè)iconfont.ttf,對(duì)于這個(gè)ttf文件,我想我們并不陌生吧。新建項(xiàng)目,將這個(gè)ttf文件拖入自己的項(xiàng)目里。

注意:勾選如圖選項(xiàng)
接下來(lái)配置項(xiàng)目加載這個(gè)文件
檢查文件是否在項(xiàng)目中,不然會(huì)崩潰

在plist文件中加入字體

接下來(lái)我們借助淘點(diǎn)點(diǎn)科技寫(xiě)的一個(gè)關(guān)于iconfont封裝,方便我們使用iconfont。iconfont的封裝包括

工具類(lèi)
TBCityIconInfo.h的實(shí)現(xiàn)
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface TBCityIconInfo : NSObject @property (nonatomic, strong) NSString *text; @property (nonatomic, assign) NSInteger size; @property (nonatomic, strong) UIColor *color; - (instancetype)initWithText:(NSString *)text size:(NSInteger)size color:(UIColor *)color; + (instancetype)iconInfoWithText:(NSString *)text size:(NSInteger)size color:(UIColor *)color; @end
TBCityIconInfo.m的實(shí)現(xiàn)
#import "TBCityIconInfo.h"
@implementation TBCityIconInfo
- (instancetype)initWithText:(NSString *)text size:(NSInteger)size color:(UIColor *)color {
if (self = [super init]) {
self.text = text;
self.size = size;
self.color = color;
}
return self;
}
+ (instancetype)iconInfoWithText:(NSString *)text size:(NSInteger)size color:(UIColor *)color {
return [[TBCityIconInfo alloc] initWithText:text size:size color:color];
}
@end
TBCityIconFont.h的實(shí)現(xiàn)
#import "UIImage+TBCityIconFont.h" #import "TBCityIconInfo.h" #define TBCityIconInfoMake(text, imageSize, imageColor) [TBCityIconInfo iconInfoWithText:text size:imageSize color:imageColor] @interface TBCityIconFont : NSObject + (UIFont *)fontWithSize: (CGFloat)size; + (void)setFontName:(NSString *)fontName;
TBCityIconFont.m的實(shí)現(xiàn)
#import "TBCityIconFont.h"
#import <CoreText/CoreText.h>
@implementation TBCityIconFont
static NSString *_fontName;
+ (void)registerFontWithURL:(NSURL *)url {
NSAssert([[NSFileManager defaultManager] fileExistsAtPath:[url path]], @"Font file doesn't exist");
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);
CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
CGDataProviderRelease(fontDataProvider);
CTFontManagerRegisterGraphicsFont(newFont, nil);
CGFontRelease(newFont);
}
+ (UIFont *)fontWithSize:(CGFloat)size {
UIFont *font = [UIFont fontWithName:[self fontName] size:size];
if (font == nil) {
NSURL *fontFileUrl = [[NSBundle mainBundle] URLForResource:[self fontName] withExtension:@"ttf"];
[self registerFontWithURL: fontFileUrl];
font = [UIFont fontWithName:[self fontName] size:size];
NSAssert(font, @"UIFont object should not be nil, check if the font file is added to the application bundle and you're using the correct font name.");
}
return font;
}
+ (void)setFontName:(NSString *)fontName {
_fontName = fontName;
}
+ (NSString *)fontName {
return _fontName ? : @"iconfont";
}
@end
UIImage+TBCityIconFont.h的實(shí)現(xiàn)
#import <UIKit/UIKit.h>
#import "TBCityIconInfo.h"
@interface UIImage (TBCityIconFont)
+ (UIImage *)iconWithInfo:(TBCityIconInfo *)info;
@end
UIImage+TBCityIconFont.m的實(shí)現(xiàn)
#import "UIImage+TBCityIconFont.h"
#import "TBCityIconFont.h"
#import <CoreText/CoreText.h>
@implementation UIImage (TBCityIconFont)
+ (UIImage *)iconWithInfo:(TBCityIconInfo *)info {
CGFloat size = info.size;
CGFloat scale = [UIScreen mainScreen].scale;
CGFloat realSize = size * scale;
UIFont *font = [TBCityIconFont fontWithSize:realSize];
UIGraphicsBeginImageContext(CGSizeMake(realSize, realSize));
CGContextRef context = UIGraphicsGetCurrentContext();
if ([info.text respondsToSelector:@selector(drawAtPoint:withAttributes:)]) {
/**
* 如果這里拋出異常,請(qǐng)打開(kāi)斷點(diǎn)列表,右擊All Exceptions -> Edit Breakpoint -> All修改為Objective-C
* See: http://stackoverflow.com/questions/1163981/how-to-add-a-breakpoint-to-objc-exception-throw/14767076#14767076
*/
[info.text drawAtPoint:CGPointZero withAttributes:@{NSFontAttributeName:font, NSForegroundColorAttributeName: info.color}];
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
CGContextSetFillColorWithColor(context, info.color.CGColor);
[info.text drawAtPoint:CGPointMake(0, 0) withFont:font];
#pragma clang pop
}
UIImage *image = [UIImage imageWithCGImage:UIGraphicsGetImageFromCurrentImageContext().CGImage scale:scale orientation:UIImageOrientationUp];
UIGraphicsEndImageContext();
return image;
}
@end
3.具體使用方法
1.在AppDelegate.m中,初始化iconfont
#import "AppDelegate.h"
#import "TBCityIconFont.h"
#import "ViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[TBCityIconFont setFontName:@"iconfont"];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[ViewController new]];
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
return YES;
}
在ViewController.m中實(shí)現(xiàn)
#import "ViewController.h"
#import "TBCityIconFont.h"
#import "UIImage+TBCityIconFont.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 30, 30)];
[self.view addSubview:imageView];
//圖標(biāo)編碼是,需要轉(zhuǎn)成\U0000e600
imageView.image = [UIImage iconWithInfo:TBCityIconInfoMake(@"\U0000e600", 30, [UIColor redColor])];
// button
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectMake(100, 150, 40, 40);
[self.view addSubview:button];
[button setImage:[UIImage iconWithInfo:TBCityIconInfoMake(@"\U0000e614", 40, [UIColor redColor])] forState:UIControlStateNormal];
// label,label可以將文字與圖標(biāo)結(jié)合一起,直接用label的text屬性將圖標(biāo)顯示出來(lái)
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 200, 280, 40)];
[self.view addSubview:label];
label.font = [UIFont fontWithName:@"iconfont" size:15];//設(shè)置label的字體
label.text = @"在lable上顯示 \U0000e658";
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
結(jié)果如下圖所示:

注意:
1. 所用到的unicode編碼需要自己手動(dòng)將&#xXXXX格式轉(zhuǎn)換成\UXXXXXXXX格式,例如//圖標(biāo)編碼是,需要轉(zhuǎn)成\U0000e600
2. 所有需要的unicode編碼都可以在下載的iconfont文件夾中的.html文件打開(kāi)查看

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
iOS中 LGLAlertView 提示框的實(shí)例代碼
這篇文章主要介紹了iOS中 LGLAlertView 提示框的實(shí)例代碼非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
iOS開(kāi)發(fā)避免安全隱患的要點(diǎn)總結(jié)
在本篇文章里小編給各位整理了關(guān)于iOS開(kāi)發(fā)如何避免安全隱患的知識(shí)點(diǎn)總結(jié),需要的朋友們學(xué)習(xí)下。2019-07-07
Objective-C學(xué)習(xí)之ARC的實(shí)現(xiàn)方法
自動(dòng)引用計(jì)數(shù)(Automatic Reference Counting, ARC)把壓在程序員們肩頭的管理內(nèi)存的重?fù)?dān)卸除了不少,更不用說(shuō)讓跟蹤內(nèi)存泄漏那樣的煩心事也少了很多。下面這篇文章主要給大家介紹了關(guān)于Objective-C學(xué)習(xí)之ARC的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒下。2017-12-12
iOS開(kāi)發(fā)系列--詳細(xì)介紹數(shù)據(jù)存取
本篇文章主要介紹了iOS開(kāi)發(fā)系列--詳細(xì)介紹數(shù)據(jù)存取,詳細(xì)介紹了IOS數(shù)據(jù)的存儲(chǔ)問(wèn)題,具有一定的參考價(jià)值,有興趣的同學(xué)可以了解一下。2016-11-11
詳解iOS應(yīng)用UI開(kāi)發(fā)中的九宮格坐標(biāo)計(jì)算與字典轉(zhuǎn)換模型
這篇文章主要介紹了iOS應(yīng)用UI開(kāi)發(fā)中的九宮格坐標(biāo)計(jì)算與字典轉(zhuǎn)換模型,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01
iOS給border設(shè)置漸變色的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于iOS給border設(shè)置漸變色的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
iOS NSURLSessionDownloadTask實(shí)現(xiàn)文件斷點(diǎn)下載的方法
本篇文章主要介紹了iOS NSURLSessionDownloadTask實(shí)現(xiàn)文件斷點(diǎn)下載的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
iOS小組件開(kāi)發(fā)之WidgetKit功能講解
這篇文章主要為大家介紹了iOS小組件開(kāi)發(fā)WidgetKit功能講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

