碼出一個(gè)高顏值原生折線圖(新增柱狀圖、環(huán)形圖)

一:介紹

在項(xiàng)目中遇到數(shù)據(jù)展示需求時(shí),往往會(huì)通過蜓氨,以列表的形式展示出數(shù)據(jù)或者以表格的形式展示聋袋。但是并不能直觀的觀察數(shù)據(jù)的變化,如果通過圖表的形式來展示穴吹,就可以更快捷的獲取到數(shù)據(jù)變化情況幽勒。

圖表展示的方式大致分為折線圖、柱狀圖港令、餅狀圖等等啥容,那么如何碼出一個(gè)高顏值原生折線圖呢?

源碼Demo獲取方法

關(guān)注 【網(wǎng)羅開發(fā)】微信公眾號(hào)顷霹,回復(fù)【96】便可領(lǐng)取咪惠。
網(wǎng)羅天下方法,方便你我開發(fā)淋淀,更多iOS技術(shù)干貨等待領(lǐng)取遥昧,所有文檔會(huì)持續(xù)更新,歡迎關(guān)注一起成長(zhǎng)朵纷!

下面來介紹一下如何使用炭臭。

二:項(xiàng)目展示

運(yùn)行后的展示截圖如下:

統(tǒng)計(jì)圖.PNG

三: 實(shí)現(xiàn)思路分析

實(shí)現(xiàn)折線圖的核心代碼是下面四個(gè)類:

  • FBYLineGraphBaseView
  • FBYLineGraphContentView
    *FBYLineGraphColorView
  • FBYLineGraphView
    下面針對(duì)這四個(gè)類實(shí)現(xiàn)做一個(gè)詳細(xì)的流程分析。

1. 折線圖基礎(chǔ)框架實(shí)現(xiàn)(FBYLineGraphBaseView類)

折線圖基礎(chǔ)框架包括Y軸刻度標(biāo)簽袍辞、X軸刻度標(biāo)簽鞋仍、與x軸平行的網(wǎng)格線的間距、網(wǎng)格線的起始點(diǎn)搅吁、x 軸長(zhǎng)度凿试、y 軸長(zhǎng)度,代碼如下:

#import <UIKit/UIKit.h>

@interface FBYLineGraphBaseView : UIView

//Y軸刻度標(biāo)簽
@property (nonatomic, strong) NSArray *yMarkTitles;

//X軸刻度標(biāo)簽
@property (nonatomic, strong) NSArray *xMarkTitles;

// 與x軸平行的網(wǎng)格線的間距
@property (nonatomic, assign) CGFloat xScaleMarkLEN;

//網(wǎng)格線的起始點(diǎn)
@property (nonatomic, assign) CGPoint startPoint;

//x 軸長(zhǎng)度
@property (nonatomic, assign) CGFloat yAxis_L;

//y 軸長(zhǎng)度
@property (nonatomic, assign) CGFloat xAxis_L;

//繪圖
- (void)mapping;

//更新做標(biāo)注數(shù)據(jù)
- (void)reloadDatas;

@end

2. 折線圖數(shù)據(jù)內(nèi)容顯示(FBYLineGraphContentView類)

折線圖數(shù)據(jù)內(nèi)容顯示是繼承FBYLineGraphBaseView類進(jìn)行實(shí)現(xiàn)似芝,其中主要包括,X軸最大值板甘、數(shù)據(jù)內(nèi)容來實(shí)現(xiàn)党瓮,代碼如下:

#import <UIKit/UIKit.h>
#import "FBYLineGraphBaseView.h"
@interface FBYLineGraphContentView : FBYLineGraphBaseView

@property (nonatomic, strong) NSArray *valueArray;
@property (nonatomic, assign) CGFloat maxValue;

//繪圖
- (void)mapping;

//更新折線圖數(shù)據(jù)
- (void)reloadDatas;
@end

3. 折線圖顏色控制類(FBYLineGraphColorView類)

折線圖顏色控制類主要控制選中遠(yuǎn)點(diǎn)邊框?qū)挾群驼w布局顏色,代碼如下:

#import <UIKit/UIKit.h>

@interface FBYLineGraphColorView : UIView

//顏色設(shè)置
@property (nonatomic, assign) CGFloat borderWidth;
@property (nonatomic, assign) UIColor *borderColor;

- (instancetype)initWithCenter:(CGPoint)center radius:(CGFloat)radius;

@end

3. 折線圖核心代碼類(FBYLineGraphView類)

折線圖核心代碼類主要給引用類提供配置接口和數(shù)據(jù)接口盐类,其中包括表名寞奸、Y軸刻度標(biāo)簽title、Y軸最大值在跳、X軸刻度標(biāo)簽的長(zhǎng)度(單位長(zhǎng)度)枪萄、設(shè)置折線圖顯示的數(shù)據(jù)和對(duì)應(yīng)X坐標(biāo)軸刻度標(biāo)簽,代碼如下:

#import <UIKit/UIKit.h>

@interface FBYLineGraphView : UIView

//表名
@property (nonatomic, strong) NSString *title;

//Y軸刻度標(biāo)簽title
@property (nonatomic, strong) NSArray *yMarkTitles;

//Y軸最大值
@property (nonatomic, assign) CGFloat maxValue;

//X軸刻度標(biāo)簽的長(zhǎng)度(單位長(zhǎng)度)
@property (nonatomic, assign) CGFloat xScaleMarkLEN;

/**
 *  設(shè)置折線圖顯示的數(shù)據(jù)和對(duì)應(yīng)X坐標(biāo)軸刻度標(biāo)簽
 *
 *  @param xMarkTitlesAndValues 折線圖顯示的數(shù)據(jù)和X坐標(biāo)軸刻度標(biāo)簽
 *  @param titleKey             標(biāo)簽(如:9月1日)
 *  @param valueKey             數(shù)據(jù) (如:80)
 */
- (void)setXMarkTitlesAndValues:(NSArray *)xMarkTitlesAndValues titleKey:(NSString *)titleKey valueKey:(NSString *)valueKey;

- (void)mapping;
- (void)reloadDatas;
@end

四:如何在項(xiàng)目中使用

1. 下載源碼

在demo中找到FBYLineGraph文件夾猫妙,將文件夾拖入自己的項(xiàng)目中瓷翻。DEMO截圖

B0375CE3-F420-4E36-842F-6491EA0047F9.png

2. 代碼引用

2.1 首先在項(xiàng)目中需要使用的頁面引用

#import "FBYLineGraphView.h"

2.2 初始化折線圖

FBYLineGraphView *LineGraphView = [[FBYLineGraphView alloc] initWithFrame:CGRectMake(10, 100, SCREEN_WIDTH - 20, 220)];

2.3 設(shè)置折線圖屬性

LineGraphView.title = @"折線統(tǒng)計(jì)圖"; // 折線圖名稱
LineGraphView.maxValue = 100;   // 最大值
LineGraphView.xScaleMarkLEN = 60; // 每格的寬度如果不設(shè)置,系統(tǒng)默認(rèn)平均分配

2.4 給折線圖添加內(nèi)容

LineGraphView.yMarkTitles = @[@"0",@"20",@"40",@"60",@"80",@"100"]; // Y軸刻度標(biāo)簽

[LineGraphView setXMarkTitlesAndValues:@[@{@"item":@"1月1日",@"count":@10},@{@"item":@"1月2日",@"count":@80},@{@"item":@"1月3日",@"count":@68},@{@"item":@"1月4日",@"count":@100},@{@"item":@"1月5日",@"count":@60},@{@"item":@"1月6日",@"count":@56},@{@"item":@"1月7日",@"count":@11}] titleKey:@"item" valueKey:@"count"]; // X軸刻度標(biāo)簽及相應(yīng)的值

可以根據(jù)自己項(xiàng)目獲取的數(shù)據(jù)進(jìn)行修改,不過數(shù)據(jù)格式不要改動(dòng)齐帚。

2.5 設(shè)置完數(shù)據(jù)和屬性妒牙,繪制展示折線圖

//設(shè)置完數(shù)據(jù)等屬性后繪圖折線圖
[LineGraphView mapping];
[self.view addSubview:LineGraphView];

設(shè)置完上面的,一個(gè)高顏值原生折線統(tǒng)計(jì)圖就可以使用了对妄。
如果好用就請(qǐng)點(diǎn)贊關(guān)注湘今,會(huì)不定期更新更多干貨。更多源碼可以去GitHub下載剪菱。

希望可以幫助大家摩瞎,如有問題可加QQ群: 668562416 交流

如果哪里有什么不對(duì)或者不足的地方,還望讀者多多提意見或建議

如需轉(zhuǎn)載請(qǐng)聯(lián)系我孝常,經(jīng)過授權(quán)方可轉(zhuǎn)載旗们,謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市茫因,隨后出現(xiàn)的幾起案子蚪拦,更是在濱河造成了極大的恐慌,老刑警劉巖冻押,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驰贷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡洛巢,警方通過查閱死者的電腦和手機(jī)括袒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稿茉,“玉大人锹锰,你說我怎么就攤上這事±炜猓” “怎么了恃慧?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)渺蒿。 經(jīng)常有香客問我痢士,道長(zhǎng),這世上最難降的妖魔是什么茂装? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任怠蹂,我火速辦了婚禮,結(jié)果婚禮上少态,老公的妹妹穿的比我還像新娘城侧。我一直安慰自己,他們只是感情好彼妻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布嫌佑。 她就那樣靜靜地躺著豆茫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歧强。 梳的紋絲不亂的頭發(fā)上澜薄,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音摊册,去河邊找鬼肤京。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茅特,可吹牛的內(nèi)容都是我干的忘分。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼白修,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼妒峦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兵睛,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤肯骇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后祖很,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笛丙,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年假颇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胚鸯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笨鸡,死狀恐怖姜钳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情形耗,我是刑警寧澤哥桥,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站激涤,受9級(jí)特大地震影響泰讽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昔期,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佛玄。 院中可真熱鬧硼一,春花似錦、人聲如沸梦抢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哼蛆,卻和暖如春蕊梧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腮介。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工肥矢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叠洗。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓甘改,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親灭抑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子十艾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容