一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - iOS使用Charts框架繪制折線圖

iOS使用Charts框架繪制折線圖

2021-02-28 14:11jianshu_wl IOS

本文主要介紹了iOS使用Charts框架繪制折線圖的方法,具有一定的參考價值,下面跟著小編一起來看下吧

首先先看一下效果:

iOS使用Charts框架繪制折線圖

折線圖

一、 初始化折線圖對象

創建一個折線圖的用到的類是linechartview.h, 代碼如下:

?
1
2
3
4
5
6
7
8
9
self.linechartview = [[linechartview alloc] init];
self.linechartview.delegate = self;//設置代理
[self.view addsubview:self.linechartview];
[self.linechartview mas_makeconstraints:^(masconstraintmaker *make) {
 make.size.mas_equalto(cgsizemake(self.view.bounds.size.width-20, 300));
 make.center.mas_equalto(self.view);
}];
self.linechartview.backgroundcolor = [uicolor colorwithred:230/255.0f green:253/255.0f blue:253/255.0f alpha:1];
self.linechartview.nodatatext = @"暫無數據";

二、設置折線圖外觀樣式

1.設置交互樣式

?
1
2
3
4
5
self.linechartview.scaleyenabled = no;//取消y軸縮放
self.linechartview.doubletaptozoomenabled = no;//取消雙擊縮放
self.linechartview.dragenabled = yes;//啟用拖拽圖標
self.linechartview.dragdecelerationenabled = yes;//拖拽后是否有慣性效果
self.linechartview.dragdecelerationfrictioncoef = 0.9;//拖拽后慣性效果的摩擦系數(0~1),數值越小,慣性越不明顯

2.設置x軸樣式

?
1
2
3
4
5
6
chartxaxis *xaxis = self.linechartview.xaxis;
xaxis.axislinewidth = 1.0/[uiscreen mainscreen].scale;//設置x軸線寬
xaxis.labelposition = xaxislabelpositionbottom;//x軸的顯示位置,默認是顯示在上面的
xaxis.drawgridlinesenabled = no;//不繪制網格線
xaxis.spacebetweenlabels = 4;//設置label間隔
xaxis.labeltextcolor = [self colorwithhexstring:@"#057748"];//label文字顏色

3.設置y軸樣式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
self.linechartview.rightaxis.enabled = no;//不繪制右邊軸
chartyaxis *leftaxis = self.linechartview.leftaxis;//獲取左邊y軸
leftaxis.labelcount = 5;//y軸label數量,數值不一定,如果forcelabelsenabled等于yes, 則強制繪制制定數量的label, 但是可能不平均
leftaxis.forcelabelsenabled = no;//不強制繪制指定數量的label
leftaxis.showonlyminmaxenabled = no;//是否只顯示最大值和最小值
leftaxis.axisminvalue = 0;//設置y軸的最小值
leftaxis.startatzeroenabled = yes;//從0開始繪制
leftaxis.axismaxvalue = 105;//設置y軸的最大值
leftaxis.inverted = no;//是否將y軸進行上下翻轉
leftaxis.axislinewidth = 1.0/[uiscreen mainscreen].scale;//y軸線寬
leftaxis.axislinecolor = [uicolor blackcolor];//y軸顏色
leftaxis.valueformatter = [[nsnumberformatter alloc] init];//自定義格式
leftaxis.valueformatter.positivesuffix = @" $";//數字后綴單位
leftaxis.labelposition = yaxislabelpositionoutsidechart;//label位置
leftaxis.labeltextcolor = [self colorwithhexstring:@"#057748"];//文字顏色
leftaxis.labelfont = [uifont systemfontofsize:10.0f];//文字字體

4.設置網格線樣式

主要是設置y軸的網格線樣式, 代碼如下:

?
1
2
3
leftaxis.gridlinedashlengths = @[@3.0f, @3.0f];//設置虛線樣式的網格線
leftaxis.gridcolor = [uicolor colorwithred:200/255.0f green:200/255.0f blue:200/255.0f alpha:1];//網格線顏色
leftaxis.gridantialiasenabled = yes;//開啟抗鋸齒

5.添加限制線

限制線可以添加多條, 在這里只添加一條做演示, 代碼如下:

?
1
2
3
4
5
6
7
8
9
chartlimitline *limitline = [[chartlimitline alloc] initwithlimit:80 label:@"限制線"];
limitline.linewidth = 2;
limitline.linecolor = [uicolor greencolor];
limitline.linedashlengths = @[@5.0f, @5.0f];//虛線樣式
limitline.labelposition = chartlimitlabelpositionrighttop;//位置
limitline.valuetextcolor = [self colorwithhexstring:@"#057748"];//label文字顏色
limitline.valuefont = [uifont systemfontofsize:12];//label字體
[leftaxis addlimitline:limitline];//添加到y軸上
leftaxis.drawlimitlinesbehinddataenabled = yes;//設置限制線繪制在折線圖的后面

6.設置折線圖描述及圖例樣式

當有多條折線顯示在圖表上時, 通常需要一個'圖例'來說明每一條折線的名稱或者代表的含義, 這時候就要進行圖例的設置, 主要代碼如下:

?
1
2
3
4
5
[self.linechartview setdescriptiontext:@"折線圖"];//折線圖描述
[self.linechartview setdescriptiontextcolor:[uicolor darkgraycolor]];
self.linechartview.legend.form = chartlegendformline;//圖例的樣式
self.linechartview.legend.formsize = 30;//圖例中線條的長度
self.linechartview.legend.textcolor = [uicolor darkgraycolor];//圖例文字顏色

除了可以用以上這些屬性來設置樣式以外, 還有其它很多屬性, 可以自行嘗試. 由于以上這些屬性較簡單, 從屬性名就可以看出其含義, 而且在代碼后面也大都有注釋, 在這里就不對這些屬性作一一解釋了.

三、為折線圖提供數據

為折線圖提供數據, 和柱形圖差不多, 唯一不同的是設置折線圖的折線線條樣式, 在設置線條樣式時, 我們可以設置折線的類型, 有階梯類型和一般類型. 我們也可以設置折線拐點的樣式, 拐點的大小, 拐點是否可以是空心類型等. 此外還可以對折線圖進行顏色填充, 以此來美化圖表. 由于樣式太多, 在這里就不多說了, 直接看代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
- (linechartdata *)setdata{
 int xvals_count = 12;//x軸上要顯示多少條數據
 double maxyval = 100;//y軸的最大值
 //x軸上面需要顯示的數據
 nsmutablearray *xvals = [[nsmutablearray alloc] init];
 for (int i = 0; i < xvals_count; i++) {
 [xvals addobject:[nsstring stringwithformat:@"%d月", i+1]];
 }
 //對應y軸上面需要顯示的數據
 nsmutablearray *yvals = [[nsmutablearray alloc] init];
 for (int i = 0; i < xvals_count; i++) {
 double mult = maxyval + 1;
 double val = (double)(arc4random_uniform(mult));
 chartdataentry *entry = [[chartdataentry alloc] initwithvalue:val xindex:i];
 [yvals addobject:entry];
 }
 linechartdataset *set1 = nil;
 if (self.linechartview.data.datasetcount > 0) {
 linechartdata *data = (linechartdata *)self.linechartview.data;
 set1 = (linechartdataset *)data.datasets[0];
 set1.yvals = yvals;
 return data;
 }else{
 //創建linechartdataset對象
 set1 = [[linechartdataset alloc] initwithyvals:yvals label:@"linename"];
 //設置折線的樣式
 set1.linewidth = 1.0/[uiscreen mainscreen].scale;//折線寬度
 set1.drawvaluesenabled = yes;//是否在拐點處顯示數據
 set1.valuecolors = @[[uicolor browncolor]];//折線拐點處顯示數據的顏色
 [set1 setcolor:[self colorwithhexstring:@"#007fff"]];//折線顏色
 set1.drawsteppedenabled = no;//是否開啟繪制階梯樣式的折線圖
 //折線拐點樣式
 set1.drawcirclesenabled = no;//是否繪制拐點
 set1.circleradius = 4.0f;//拐點半徑
 set1.circlecolors = @[[uicolor redcolor], [uicolor greencolor]];//拐點顏色
 //拐點中間的空心樣式
 set1.drawcircleholeenabled = yes;//是否繪制中間的空心
 set1.circleholeradius = 2.0f;//空心的半徑
 set1.circleholecolor = [uicolor blackcolor];//空心的顏色
 //折線的顏色填充樣式
 //第一種填充樣式:單色填充
// set1.drawfilledenabled = yes;//是否填充顏色
// set1.fillcolor = [uicolor redcolor];//填充顏色
// set1.fillalpha = 0.3;//填充顏色的透明度
 //第二種填充樣式:漸變填充
 set1.drawfilledenabled = yes;//是否填充顏色
 nsarray *gradientcolors = @[(id)[chartcolortemplates colorfromstring:@"#ffffffff"].cgcolor,
   (id)[chartcolortemplates colorfromstring:@"#ff007fff"].cgcolor];
 cggradientref gradientref = cggradientcreatewithcolors(nil, (cfarrayref)gradientcolors, nil);
 set1.fillalpha = 0.3f;//透明度
 set1.fill = [chartfill fillwithlineargradient:gradientref angle:90.0f];//賦值填充顏色對象
 cggradientrelease(gradientref);//釋放gradientref
 //點擊選中拐點的交互樣式
 set1.highlightenabled = yes;//選中拐點,是否開啟高亮效果(顯示十字線)
 set1.highlightcolor = [self colorwithhexstring:@"#c83c23"];//點擊選中拐點的十字線的顏色
 set1.highlightlinewidth = 1.0/[uiscreen mainscreen].scale;//十字線寬度
 set1.highlightlinedashlengths = @[@5, @5];//十字線的虛線樣式
 //將 linechartdataset 對象放入數組中
 nsmutablearray *datasets = [[nsmutablearray alloc] init];
 [datasets addobject:set1];
 //添加第二個linechartdataset對象
// linechartdataset *set2 = [set1 copy];
// nsmutablearray *yvals2 = [[nsmutablearray alloc] init];
// for (int i = 0; i < xvals_count; i++) {
// double mult = maxyval + 1;
// double val = (double)(arc4random_uniform(mult));
// chartdataentry *entry = [[chartdataentry alloc] initwithvalue:val xindex:i];
// [yvals2 addobject:entry];
// }
// set2.yvals = yvals2;
// [set2 setcolor:[uicolor redcolor]];
// set2.drawfilledenabled = yes;//是否填充顏色
// set2.fillcolor = [uicolor redcolor];//填充顏色
// set2.fillalpha = 0.1;//填充顏色的透明度
// [datasets addobject:set2];
 //創建 linechartdata 對象, 此對象就是linechartview需要最終數據對象
 linechartdata *data = [[linechartdata alloc] initwithxvals:xvals datasets:datasets];
 [data setvaluefont:[uifont fontwithname:@"helveticaneue-light" size:8.f]];//文字字體
 [data setvaluetextcolor:[uicolor graycolor]];//文字顏色
 nsnumberformatter *formatter = [[nsnumberformatter alloc] init];
 //自定義數據顯示格式
 [formatter setnumberstyle:nsnumberformatterdecimalstyle];
 [formatter setpositiveformat:@"#0.0"];
 [data setvalueformatter:formatter];
 return data;
 }
}

代理方法和其他圖表一樣,這里就不再贅述了.

運行結果如下:

iOS使用Charts框架繪制折線圖

運行結果

為折線圖提供數據的用到的是linechartdata類創建的對象, 在linechartdata對象初始化時, 需要提供datasets數組(里面放的是linechartdataset對象), 上面的例子中datasets數組中只有一個linechartdataset對象, 也就是只有一條折線, 我們也可以在datasets數組中放入多個linechartdataset對象, 也就是多條曲線, 下面的結果就是添加2條折線的效果, 如下圖:

iOS使用Charts框架繪制折線圖

多條折線的折線圖

demo 下載地址: linechartdemo-master.rar

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務器之家!

原文鏈接:http://www.jianshu.com/p/27c756b536df

延伸 · 閱讀

精彩推薦
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
主站蜘蛛池模板: 免费午夜影院 | 国产视频在线一区 | 午夜私人影院在线观看 | 日韩欧一级毛片在线播无遮挡 | 色吧| 人与动人物人a级特片 | chinesezoozvideos | 国产精品成人网红女主播 | 忘忧草在线社区WWW日本-韩国 | 秋霞午夜视频在线观看 | 国产日韩欧美在线一二三四 | yjsp妖精视频在线观看免费 | aa视频免费 | 日本高清视频网站 | 亚洲免费精品 | av排名| 猛男强攻变sao货 | 欧美成人日韩 | 女人张开腿让男人桶爽 | 亚洲天堂2013| 玩高中女同桌肉色短丝袜脚文 | 喷奶水榨乳ova动漫无修 | 羞羞答答免费人成黄页在线观看国产 | 京东热在线观看 | 9191视频| 亚洲精品视频在线免费 | 95视频在线观看在线分类h片 | 妇乱子伦激情 | 都市风流贵妇激情 | 国产精品久久久久久久免费大片 | 激情文学综合网 | 亚洲人成高清毛片 | 按摩院已婚妇女中文字幕 | 国产精品午夜性视频网站 | 妇伦小说| 大奶喷水| 女人爽到喷水的视频免费看 | 免费看国产一级片 | 国产成人在线影院 | 男人的j伸到女人的屁股眼 男人吃奶动态图 | 咪咪爱991|