BSChartView畫折線圖,柱形圖,圓餅圖

BSChartView

  1. 一個支持畫折線圖,柱狀圖,圓餅圖的工具
  2. 支持雙Y軸顯示,支持左右滑動,支持自定義樣式。

效果

在這裏插入圖片描述

gitHub地址: github.com/FreeBaiShun…

pod集成

pod 'BSChartView'git

用法

相似於tableView的使用github

//
//  ViewController.m
//
//  Created by BS on 2019/8/25.
//  Copyright © 2019年 BS. All rights reserved.
//

#import "ViewController.h"
#import "BSLineChartView.h"
#import "BSPieChartView.h"

#define HEX_COLOR(hex) [UIColor colorWithRed:((float)((hex &0xFF0000)>>16))/255.0 green:((float)((hex &0xFF00)>>8))/255.0 blue:((float)(hex &0xFF))/255.0 alpha:1] ///分類中已此宏

@interface ViewController ()<LineChartViewDataSource, PieChartViewDataSource>
@property (copy, nonatomic) NSMutableArray *arrMX;//x軸座標數據
@property (copy, nonatomic) NSMutableArray *arrMData;//y左軸折線圖數據1
@property (copy, nonatomic) NSMutableArray *arrMData1;//y左軸折線圖數據2
@property (copy, nonatomic) NSMutableArray *arrMColumn;//y右軸柱狀圖數據

@property (copy, nonatomic) NSMutableArray *arrMPieData;//圓餅圖的數據源
@property (copy, nonatomic) NSMutableArray *arrMPieTitles;//圓餅圖的標題數據源
@property (copy, nonatomic) NSMutableArray *arrMPieDataChange;//圓餅圖的替換數據源
@property (copy, nonatomic) NSMutableArray *arrMPieTitlesChange;//圓餅圖的替換標題數據源

@property (strong, nonatomic) UIButton *btnRefresh;
@end

@implementation ViewController{
BSLineChartView *lineChartView;
int count;
BSPieChartView *chartView;
NSArray *arrPieData;
NSArray *arrPieTitleData;
}

//懶加載數據源
- (NSMutableArray *)arrMX{
if (_arrMX == nil) {
_arrMX = [NSMutableArray array];
for (int i = 1; i <= 30; i++) {
[_arrMX addObject:[NSString stringWithFormat:@"11-%d",i]];
}
}
return _arrMX;
}

- (NSMutableArray *)arrMData{
if (_arrMData == nil) {
_arrMData = [NSMutableArray array];
for (int i = 1; i <= 30; i++) {
if (i %2 == 0) {
[_arrMData addObject:@"200"];
}else{
[_arrMData addObject:@"100"];
}
}
}
return _arrMData;
}

- (NSMutableArray *)arrMData1{
if (_arrMData1 == nil) {
_arrMData1 = [NSMutableArray array];
for (int i = 1; i <= 30; i++) {
if (i %2 == 0) {
[_arrMData1 addObject:@"100"];
}else{
[_arrMData1 addObject:@"200"];
}
}
}
return _arrMData1;
}

- (NSMutableArray *)arrMColumn{
if (_arrMColumn == nil) {
_arrMColumn = [NSMutableArray array];
for (int i = 1; i <= 30; i++) {
if (i %2 == 0) {
[_arrMColumn addObject:@"150"];
}else{
[_arrMColumn addObject:@"250"];
}
}
}
return _arrMColumn;
}

- (NSMutableArray *)arrMPieData{
if (_arrMPieData == nil) {
_arrMPieData = [NSMutableArray arrayWithArray:@[@(0.1), @(0.25), @(0.2), @(0.1), @(0.15), @(0.2)]];
}
return _arrMPieData;
}

- (NSMutableArray *)arrMPieTitles{
if (_arrMPieTitles == nil) {
_arrMPieTitles = [NSMutableArray arrayWithArray:@[@"10.00%\n400人",@"25.00%\n400人",@"20.00%\n400人",@"10.00%\n400人",@"15.00%\n400人",@"20.00%\n400人"]];
}
return _arrMPieTitles;
}

- (NSMutableArray *)arrMPieDataChange{
if (_arrMPieDataChange == nil) {
_arrMPieDataChange = [NSMutableArray arrayWithArray:@[@(0.2), @(0.15), @(0.1), @(0.2), @(0.25), @(0.1)]];
}
return _arrMPieDataChange;
}

- (NSMutableArray *)arrMPieTitlesChange{
if (_arrMPieTitlesChange == nil) {
_arrMPieTitlesChange = [NSMutableArray arrayWithArray:@[@"20.00%\n100人",@"15.00%\n100人",@"10.00%\n100人",@"20.00%\n100人",@"25.00%\n100人",@"10.00%\n100人"]];
}
return _arrMPieTitlesChange;
}

- (void)viewDidLoad {
[super viewDidLoad];

arrPieData = self.arrMPieData;
arrPieTitleData = self.arrMPieTitles;
self.view.backgroundColor = [UIColor whiteColor];

//折線圖,柱形圖(能夠支持雙Y軸,一個折線圖的Y軸,一個柱形Y軸)
lineChartView = [[BSLineChartView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height/2-64)];

//可選配置(要在dataSource以前配置纔會生效)
lineChartView.displayVerticalLine = NO;//顯示豎線
lineChartView.YScaleAdapt = 50;//y軸刻度值自動適應值是50(就是最大數據值+50,最小數據值-50)
lineChartView.YTextColor = [UIColor orangeColor];//y軸刻度文字顏色
lineChartView.fontSize = @13;//字號
lineChartView.fontName = @"PingFangSC-Medium";//字體
lineChartView.isTextVague = YES;//文字虛化

lineChartView.dataSource = self;
[self.view addSubview:lineChartView];

//圓餅圖
chartView = [[BSPieChartView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height/2-64, self.view.frame.size.width, self.view.frame.size.height/2-64)];

//可選配置(要在dataSource以前配置纔會生效)
chartView.isTextVague = YES;//文字虛化

chartView.dataSource = self;
[self.view addSubview:chartView];

//從新刷新數據
self.btnRefresh = [[UIButton alloc] initWithFrame:CGRectMake(50, self.view.frame.size.height - 100, 80, 50)];
[self.btnRefresh setBackgroundColor:[UIColor blueColor]];
[self.btnRefresh setTitle:@"刷新數據" forState:UIControlStateNormal];
[self.btnRefresh addTarget:self action:@selector(btnRefreshClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.btnRefresh];
}

#pragma mark - LineChartViewDataSource
- (NSArray *)titlesArrayOfLineChartView:(BSLineChartView *)lineChartView
{
return self.arrMX;
}
- (NSArray *)lineValuesArrayOfLineChartView:(BSLineChartView *)lineChartView
{
return @[self.arrMData];
}
- (NSArray *)barValuesArrayOfLineChartView:(BSLineChartView *)lineChartView
{
return self.arrMColumn;
}
- (NSArray *)colorsArrayOfLineChartView:(BSPieChartView *)pieChartView
{
return @[@[[UIColor redColor], [UIColor greenColor]],
[UIColor lightGrayColor]];
}


#pragma mark - PieChartViewDataSource
- (CGFloat)radiusOfPieChartView:(BSPieChartView *)pieChartView
{
return self.view.bounds.size.width/5;
}
- (NSArray *)valuseArrayOfPieChartView:(BSPieChartView *)pieChartView
{
return arrPieData;
}
- (NSArray *)colorsArrayOfPieChartView:(BSPieChartView *)pieChartView
{
return @[HEX_COLOR(0xd32f35), HEX_COLOR(0xe653f1), HEX_COLOR(0xa46b3e), HEX_COLOR(0x2f4567), HEX_COLOR(0xaa4111), HEX_COLOR(0xd11111)];
}
//自定義標題(可選協議)
- (NSArray *)valuesTitlesChartView:(BSPieChartView *)pieChartView{
return arrPieTitleData;
}

#pragma mark - 刷新數據按鈕被點擊
- (void)btnRefreshClick{
count ++;
if (count %2 == 0) {
self.arrMData = self.arrMData1;
arrPieData = self.arrMPieData;
arrPieTitleData = self.arrMPieTitles;
}else{
self.arrMData = self.arrMColumn;
arrPieData = self.arrMPieDataChange;
arrPieTitleData = self.arrMPieTitlesChange;
}

[lineChartView refreshAllData];
[chartView refreshAllData];
}
@end
複製代碼
相關文章
相關標籤/搜索