iOS使用Charts框架绘制—饼状图彩民之家论坛9066

2019-09-10 21:27 来源:未知
1. 着力样式
[self.pieChartView setExtraOffsetsWithLeft:30 top:0 right:30 bottom:0];//饼状图距离边缘的间隙self.pieChartView.usePercentValuesEnabled = YES;//是否根据所提供的数据, 将显示数据转换为百分比格式self.pieChartView.dragDecelerationEnabled = YES;//拖拽饼状图后是否有惯性效果self.pieChartView.drawSliceTextEnabled = YES;//是否显示区块文本

JavaScript 算数对象


JavaScript的算数对象主借使用来总括职务,举个例子输入0~1之间的人身自由数,大家得以如下输入代码.

        var number = Math.random();
        document.write(number);

再比如说大家得以相比四个数的大小.用max()min()八个函数就能够.举例

        var maxNumber = Math.max(1,2);
        document.write(maxNumber);

下一场,笔者看看教程还大概有部分常用的算数值,这里做二个列表分享出来.

算数值名称 Math对象表示
常数 Math.E
圆周率 Math.PI
2 的平方根 Math.SQRT2
1/2 的平方根 Math.SQRT1_2
2 的自然对数 Math.LN2
10 的自然对数 Math.LN10
以 2 为底的 e 的对数 Math.LOG2E
以 10 为底的 e 的对数 Math.LOG10E

</br>

6、绘制雷达图

  • XAxisValueFormatter.h

        /// 设置 X 轴 数据格式
    
        @import Charts;
    
        @interface XAxisValueFormatter : NSObject <IChartAxisValueFormatter>
    
        @end
    
  • XAxisValueFormatter.m

        @implementation XAxisValueFormatter
    
        /// 实现协议方法,返回 x 轴的数据
        - (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis {
    
            // value 为 x 轴的值
    
            return [NSString stringWithFormat:@"%ld 月", (NSInteger)value   1];
        }
    
        @end
    
  • ChartDataValueFormatter.h

        /// 设置 折线显示的 数据格式
    
        @import Charts;
    
        @interface ChartDataValueFormatter : NSObject <IChartValueFormatter>
    
        @end
    
  • ChartDataValueFormatter.m

        @implementation ChartDataValueFormatter
    
        /// 实现协议方法,返回辐射线拐点上显示的数据格式
        - (NSString * _Nonnull)stringForValue:(double)value
                                        entry:(ChartDataEntry * _Nonnull)entry
                                 dataSetIndex:(NSInteger)dataSetIndex
                              viewPortHandler:(ChartViewPortHandler * _Nullable)viewPortHandler {
    
            return [NSString stringWithFormat:@"%.0f%%", entry.y];
        }
    
        @end
    
  • ViewController.m

        #import "ChartsDemo-Bridging-Header.h"
    
        // 自定义数据格式
        #import "XAxisValueFormatter.h"
        #import "ChartDataValueFormatter.h"
    
        // 遵守协议
        @interface ViewController () <ChartViewDelegate>
    
        // 雷达图
        @property (nonatomic, strong) RadarChartView *radarChartView;
    
        // 滑动时 Y 值标签
        @property (nonatomic,strong) UILabel *markYLabel;
    
        @end
    
        @implementation ViewController
    
        - (void)viewDidLoad {
            [super viewDidLoad];
    
            self.view.backgroundColor = [UIColor colorWithRed:230/255.0f green:253/255.0f blue:253/255.0f alpha:1];
    
            // 创建雷达图
            [self createdPieView];
    
            // 设置雷达图的数据
            self.radarChartView.data = [self setData];
        }
    
        // 创建雷达图
        - (void)createdPieView {
    
            // 初始化雷达图对象
            self.radarChartView = [[RadarChartView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width - 20, 400)];
            self.radarChartView.center = self.view.center;
            [self.view addSubview:self.radarChartView];
    
            // 设置基本样式
            self.radarChartView.backgroundColor = [UIColor colorWithRed:230/255.0f green:253/255.0f blue:253/255.0f alpha:1];
            self.radarChartView.delegate = self;                                        // 设置代理,需遵守 ChartViewDelegate 协议
            self.radarChartView.noDataText = @"暂无数据";                                 // 没有数据时的文字提示
    
            // 设置交互样式
            self.radarChartView.rotationEnabled = YES;                                  // 是否允许转动
            self.radarChartView.highlightPerTapEnabled = YES;                           // 是否能被选中
    
            // 设置雷达图线条样式
            self.radarChartView.webLineWidth = 1.0;                                     // 主干线线宽,辐射线
            self.radarChartView.webColor = [UIColor lightGrayColor];                    // 主干线颜色
            self.radarChartView.innerWebLineWidth = 1.0;                                // 边线宽度,圆形线
            self.radarChartView.innerWebColor = [UIColor lightGrayColor];               // 边线颜色
            self.radarChartView.webAlpha = 0.5;                                         // 雷达图线的透明度
    
            // 设置滑动时 Y 值标签
            ChartMarkerView *markerY = [[ChartMarkerView alloc] init];
            markerY.offset = CGPointMake(-17, -25);                                     // 设置显示位置
            markerY.chartView = self.radarChartView;
            [markerY addSubview:self.markYLabel];
            self.radarChartView.marker = markerY;
    
            // 设置 X 轴 label 样式,由中心向外延伸的线
            ChartXAxis *xAxis = self.radarChartView.xAxis;
            xAxis.valueFormatter = [[XAxisValueFormatter alloc] init];                  // label 文字样式,自定义格式,默认时不显示特殊符号
            xAxis.labelFont = [UIFont systemFontOfSize:15];                             // 字体
            xAxis.labelTextColor = [UIColor colorWithRed:5/255.0f green:119/255.0f blue:72/255.0f alpha:1]; // 颜色
    
            // 设置 Y 轴 label 样式,圆形的线
            ChartYAxis *yAxis = self.radarChartView.yAxis;
            yAxis.axisMinValue = 0.0;                                                   // 最小值,中心的值
            yAxis.axisMaxValue = 100.0;                                                 // 最大值,最外边的值
            yAxis.drawLabelsEnabled = YES;                                              // 是否显示 label 值
            yAxis.labelCount = 5;                                                       // label 个数
            yAxis.labelFont = [UIFont systemFontOfSize:9];                              // label 字体
            yAxis.labelTextColor = [UIColor lightGrayColor];                            // label 颜色
    
            // 设置雷达图描述
            self.radarChartView.chartDescription.enabled = YES;                         // 显示雷达图描述,默认 YES 显示
            self.radarChartView.descriptionText = @"雷达图";
            self.radarChartView.descriptionFont = [UIFont systemFontOfSize:15];
            self.radarChartView.descriptionTextColor = [UIColor grayColor];
    
            // 设置雷达图图例
            self.radarChartView.legend.enabled = YES;                                   // 显示图例,默认 YES 显示
            self.radarChartView.legend.form = ChartLegendFormCircle;                    // 图示样式: 方形、线条、圆形
            self.radarChartView.legend.formSize = 12;                                   // 图示大小
            self.radarChartView.legend.position = ChartLegendPositionBelowChartCenter;  // 图例在雷达图中的位置
            self.radarChartView.legend.maxSizePercent = 1;                              // 图例在雷达图中的大小占比, 这会影响图例的宽高
            self.radarChartView.legend.formToTextSpace = 5;                             // 文本间隔
            self.radarChartView.legend.font = [UIFont systemFontOfSize:10];             // 字体大小
            self.radarChartView.legend.textColor = [UIColor grayColor];                 // 字体颜色
    
            // 设置动画效果,可以设置 X 轴和 Y 轴的动画效果
            [self.radarChartView animateWithXAxisDuration:1.4 yAxisDuration:1.4 easingOption:ChartEasingOptionEaseOutBack];
        }
    
        // 设置雷达图数据
        - (RadarChartData *)setData {
    
            int vals_count = 12;                                                        // 维度的个数
    
            // 每个维度的名称或描述
            NSMutableArray *chartVals1 = [[NSMutableArray alloc] init];
            for (int i = 0; i < vals_count; i  ) {
    
                double partValue = arc4random() % 70   30;                              // 设置区块值
    
                RadarChartDataEntry *entry = [[RadarChartDataEntry alloc] initWithValue:partValue];
                [chartVals1 addObject:entry];
            }
    
            // 绘制雷达图
    
            // 创建 RadarChartDataSet 对象
            RadarChartDataSet *set1 = [[RadarChartDataSet alloc] initWithValues:chartVals1 label:@"RadarName 1"];
    
            // 设置数据块
            set1.lineWidth = 0.5;                                                       // 数据折线线宽
            [set1 setColor:[UIColor redColor]];                                         // 数据折线颜色
            set1.drawFilledEnabled = YES;                                               // 是否填充颜色
            set1.fillColor = [UIColor orangeColor];                                     // 填充颜色
            set1.fillAlpha = 0.5;                                                       // 填充透明度
    
            // 设置数据块折点样式
            set1.drawHighlightCircleEnabled = NO;                                       // 是否绘制选中的拐点处的圆形
            set1.highlightCircleStrokeColor = [UIColor greenColor];                     // 拐点处的圆形颜色
            [set1 setDrawHighlightIndicators:NO];                                       // 是否绘制选中拐点处的十字线
    
            // 设置显示数据
            set1.drawValuesEnabled = YES;                                               // 是否绘制显示数据
            set1.valueFont = [UIFont systemFontOfSize:9];                               // 字体
            set1.valueTextColor = [UIColor grayColor];                                  // 颜色
    
            // 创建 RadarChartData 对象, 此对象就是 PieChartData 需要最终数据对象
            RadarChartData *data = [[RadarChartData alloc] initWithDataSets:@[set1]];
            [data setValueFont:[UIFont systemFontOfSize:15]];
            [data setValueTextColor:[UIColor brownColor]];
    
            // 自定义数据显示格式
            ChartDataValueFormatter *formatter = [[ChartDataValueFormatter alloc] init];// 统一设置数据显示的格式
            [data setValueFormatter:formatter];
    
            return data;
        }
    
        #pragma mark - ChartViewDelegate
    
        // 点击选中柱形图时的代理方法
        - (void)chartValueSelected:(ChartViewBase * _Nonnull)chartView
                             entry:(ChartDataEntry * _Nonnull)entry
                         highlight:(ChartHighlight * _Nonnull)highlight {
    
            // 设置滑动时 Y 值标签
            self.markYLabel.text = [NSString stringWithFormat:@"%ld%%", (NSInteger)entry.y];
        }
    
        // 没有选中柱形图时的代理方法,当选中一个柱形图后,在空白处双击,就可以取消选择,此时会回调此方法
        - (void)chartValueNothingSelected:(ChartViewBase * _Nonnull)chartView {
    
        }
    
        // 捏合放大或缩小柱形图时的代理方法
        - (void)chartScaled:(ChartViewBase * _Nonnull)chartView scaleX:(CGFloat)scaleX scaleY:(CGFloat)scaleY {
    
        }
    
        // 拖拽图表时的代理方法
        - (void)chartTranslated:(ChartViewBase * _Nonnull)chartView dX:(CGFloat)dX dY:(CGFloat)dY {
    
        }
    
        // 懒加载滑动时 Y 值标签
        - (UILabel *)markYLabel {
    
            if (!_markYLabel) {
                _markYLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, -5, 35, 25)];
                _markYLabel.font = [UIFont systemFontOfSize:15.0];
                _markYLabel.textAlignment = NSTextAlignmentCenter;
                _markYLabel.text = @"";
                _markYLabel.textColor = [UIColor whiteColor];
                _markYLabel.backgroundColor = [UIColor grayColor];
            }
            return _markYLabel;
        }
    
        @end
    
    • 效果

      彩民之家论坛9066777 1 彩民之家论坛9066777 2

2. 安装饼状图中间的中空样式

中空有七个圆组成, 贰个是hole, 二个是transparentCircle, transparentCircle里面是hole, 所以饼状图中间的空心相当于一个齐心协力圆. 代码如下:

self.pieChartView.drawHoleEnabled = YES;//饼状图是否是空心self.pieChartView.holeRadiusPercent = 0.5;//空心半径占比self.pieChartView.holeColor = [UIColor clearColor];//空心颜色self.pieChartView.transparentCircleRadiusPercent = 0.52;//半透明空心半径占比self.pieChartView.transparentCircleColor = [UIColor colorWithRed:210/255.0 green:145/255.0 blue:165/255.0 alpha:0.3];//半透明空心的颜色
字符串

对此字符串的创建,大家在上一篇小说中早已说过了,下边小编就对字符串对象的局地普遍方法做一下列举.包罗字体型号,字体颜色,超链接等. 当然,笔者只是介绍两种常用的属性....

fontsize()//字体型号
fontcolor()//字体颜色
link()//超链接
strike()//中划线

示范如下所示.

    <body>

        <p id='label1'></p>
        <p id='label2'></p>
        <p id='label3'></p>
        <p id='label4'></p>

    </body>
    <script>
        var myString = "搞事,搞事,一天到晚就知道搞事";
        document.getElementById('label1').innerHTML = myString.fontsize(20);
        document.getElementById('label2').innerHTML = myString.fontcolor('Red');
        document.getElementById('label3').innerHTML = myString.link("http://www.jianshu.com/users/e39da354ce50/latest_articles");
        document.getElementById('label4').innerHTML = myString.strike();
    </script>

效果图如下.

彩民之家论坛9066777 3

</br>

3.2 LineChart 绘制

  • XAxisValueFormatter.h

        /// 设置 X 轴 数据格式
    
        @import Charts;
    
        @interface XAxisValueFormatter : NSObject <IChartAxisValueFormatter>
    
        @end
    
  • XAxisValueFormatter.m

        @implementation XAxisValueFormatter
    
        /// 实现协议方法,返回 x 轴的数据
        - (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis {
    
            // value 为 x 轴的值
    
            return [NSString stringWithFormat:@"%ld天", (NSInteger)value];
        }
    
        @end
    
  • YAxisValueFormatter.h

        /// 设置 Y 轴 数据格式
    
        @import Charts;
    
        @interface YAxisValueFormatter : NSObject <IChartAxisValueFormatter>
    
        @end
    
  • YAxisValueFormatter.m

        @implementation YAxisValueFormatter
    
        /// 实现协议方法,返回 y 轴的数据
        - (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis {
    
            // value 为 y 轴的值
    
            return [NSString stringWithFormat:@"%ld%%",(NSInteger)value];
        }
    
        @end
    
  • ChartDataValueFormatter.h

        /// 设置 折线显示的 数据格式
    
        @import Charts;
    
        @interface ChartDataValueFormatter : NSObject <IChartValueFormatter>
    
        @end
    
  • ChartDataValueFormatter.m

        @implementation ChartDataValueFormatter
    
        /// 实现协议方法,返回折线拐点上显示的数据格式
        - (NSString * _Nonnull)stringForValue:(double)value
                                        entry:(ChartDataEntry * _Nonnull)entry
                                 dataSetIndex:(NSInteger)dataSetIndex
                              viewPortHandler:(ChartViewPortHandler * _Nullable)viewPortHandler {
    
            return [NSString stringWithFormat:@"%.1f", entry.y];
        }
    
        @end
    
  • ChartMaxDataValueFormatter.h

        /// 设置 折线显示的 数据格式,只显示最大值
    
        @import Charts;
    
        @interface ChartMaxDataValueFormatter : NSObject <IChartValueFormatter>
    
        - (instancetype)initWithYDataVals:(NSArray *)yVals;
    
        @end
    
  • ChartMaxDataValueFormatter.m

        @interface ChartMaxDataValueFormatter ()
    
        @property (nonatomic, strong) NSArray *yDataValueArray;
        @property (nonatomic, assign) double maxDataSetIndex;
    
        @end
    
        @implementation ChartMaxDataValueFormatter
    
        - (instancetype)initWithYDataVals:(NSArray *)yVals {
            if (self = [super init]) {
    
                self.yDataValueArray = yVals;
                NSMutableArray *muArr = [NSMutableArray arrayWithArray:yVals];
                [muArr sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
                    ChartDataEntry *entry1 =(ChartDataEntry *)obj1;
                    ChartDataEntry *entry2 =(ChartDataEntry *)obj2;
                    if (entry1.y >= entry2.y){
                        return NSOrderedAscending;
                    } else {
                        return NSOrderedDescending;
                    }
                }];
                self.maxDataSetIndex =((ChartDataEntry * )muArr[0]).x;
            }
            return self;
        }
    
        /// 实现协议方法,只显示折线上数据的最大值
        - (NSString * _Nonnull)stringForValue:(double)value
                                        entry:(ChartDataEntry * _Nonnull)entry
                                 dataSetIndex:(NSInteger)dataSetIndex
                              viewPortHandler:(ChartViewPortHandler * _Nullable)viewPortHandler {
    
            if (entry.x == self.maxDataSetIndex) {
                return [NSString stringWithFormat:@"%ld%%", (NSInteger)entry.y];
            } else {
                return @"";
            }
        }
    
        @end
    
  • ViewController.m

        #import "ChartsDemo-Bridging-Header.h"
    
        // 自定义数据格式
        #import "YAxisValueFormatter.h"
        #import "XAxisValueFormatter.h"
        #import "ChartDataValueFormatter.h"
        #import "ChartMaxDataValueFormatter.h"
    
        // 遵守协议
        @interface ViewController () <ChartViewDelegate>
    
        // 折线图
        @property (nonatomic, strong) LineChartView *lineChartView;
    
        // 滑动时 Y 值标签
        @property (nonatomic,strong) UILabel *markYLabel;
    
        @end
    
        @implementation ViewController
    
        - (void)viewDidLoad {
            [super viewDidLoad];
    
            self.view.backgroundColor = [UIColor colorWithRed:230/255.0f green:253/255.0f blue:253/255.0f alpha:1];
    
            // 创建折线图
            [self createdLineView];
    
            // 设置折线图的数据
            self.lineChartView.data = [self setData];
        }
    
        // 创建折线图
        - (void)createdLineView {
    
            // 初始化折线图对象
            self.lineChartView = [[LineChartView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width - 10, 400)];
            self.lineChartView.center = self.view.center;
            [self.view addSubview:self.lineChartView];
    
            // 设置基本样式
            self.lineChartView.backgroundColor = [UIColor colorWithRed:230/255.0f green:253/255.0f blue:253/255.0f alpha:1];
            self.lineChartView.delegate = self;                                         // 设置代理,需遵守 ChartViewDelegate 协议
            self.lineChartView.noDataText = @"暂无数据";
    
            // 设置交互样式
            self.lineChartView.scaleYEnabled = NO;                                      // 取消 Y 轴缩放
            self.lineChartView.doubleTapToZoomEnabled = NO;                             // 取消双击缩放
            self.lineChartView.dragEnabled = YES;                                       // 启用拖拽图标
            self.lineChartView.dragDecelerationEnabled = YES;                           // 拖拽后是否有惯性效果
            self.lineChartView.dragDecelerationFrictionCoef = 0.9;                      // 拖拽后惯性效果的摩擦系数(0~1),数值越小,惯性越不明显
    
            // 设置滑动时 Y 值标签
            ChartMarkerView *markerY = [[ChartMarkerView alloc] init];
            markerY.offset = CGPointMake(-999, -8);
            markerY.chartView = self.lineChartView;
            [markerY addSubview:self.markYLabel];
            self.lineChartView.marker = markerY;
    
            // 设置 X 轴样式
            ChartXAxis *xAxis = self.lineChartView.xAxis;
            xAxis.labelPosition = XAxisLabelPositionBottom;                             // 设置 X 轴的显示位置,默认是显示在上面的
            xAxis.axisLineWidth = 1.0 / [UIScreen mainScreen].scale;                    // 设置 X 轴线宽
            xAxis.axisLineColor = [UIColor blackColor];                                 // 设置 X 轴颜色
            xAxis.granularityEnabled = YES;                                             // 设置重复的值不显示
            xAxis.valueFormatter = [[XAxisValueFormatter alloc] init];                  // label 文字样式,自定义格式,默认时不显示特殊符号
            xAxis.labelTextColor = [self colorWithHexString:@"#057748"];                // label 文字颜色
            xAxis.drawGridLinesEnabled = NO;                                            // 不绘制网格线
            xAxis.gridColor = [UIColor clearColor];                                     // 网格线颜色
    
            // 设置 Y 轴样式
            self.lineChartView.rightAxis.enabled = NO;                                  // 不绘制右边轴
            ChartYAxis *leftAxis = self.lineChartView.leftAxis;                         // 获取左边 Y 轴
            leftAxis.inverted = NO;                                                     // 是否将 Y 轴进行上下翻转
            leftAxis.axisMinValue = 0;                                                  // 设置 Y 轴的最小值
            leftAxis.axisMaxValue = 105;                                                // 设置 Y 轴的最大值
            leftAxis.axisLineWidth = 1.0 / [UIScreen mainScreen].scale;                 // 设置 Y 轴线宽
            leftAxis.axisLineColor = [UIColor blackColor];                              // 设置 Y 轴颜色
            leftAxis.labelPosition = YAxisLabelPositionOutsideChart;                    // label 文字位置
            leftAxis.valueFormatter = [[YAxisValueFormatter alloc] init];               // label 文字样式,自定义格式,默认时不显示特殊符号
            leftAxis.labelTextColor = [self colorWithHexString:@"#057748"];             // label 文字颜色
            leftAxis.labelFont = [UIFont systemFontOfSize:10.0f];                       // label 文字字体
            leftAxis.labelCount = 5;                                                    // label 数量,数值不一定,
                                                                                        // 如果 forceLabelsEnabled 等于 YES,
                                                                                        // 则强制绘制制定数量的 label, 但是可能不平均
            leftAxis.forceLabelsEnabled = NO;                                           // 不强制绘制指定数量的 label
            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;                                        // 网格线开启抗锯齿
    
            // 添加限制线
            ChartLimitLine *limitLine = [[ChartLimitLine alloc] initWithLimit:80 label:@"限制线"];     // 设置限制值和标题
            limitLine.lineWidth = 2;                                                    // 限制线的宽度
            limitLine.lineColor = [UIColor greenColor];                                 // 限制线的颜色
            limitLine.lineDashLengths = @[@5.0f, @5.0f];                                // 虚线样式
            limitLine.labelPosition = ChartLimitLabelPositionRightTop;                  // label 位置
            limitLine.valueTextColor = [self colorWithHexString:@"#057748"];            // label 文字颜色
            limitLine.valueFont = [UIFont systemFontOfSize:12];                         // label 字体
            [leftAxis addLimitLine:limitLine];                                          // 添加到 Y 轴上
            leftAxis.drawLimitLinesBehindDataEnabled = YES;                             // 设置限制线绘制在折线图的下面
    
            // 设置折线图描述
            self.lineChartView.chartDescription.enabled = YES;                          // 显示折线图描述,默认 YES 显示
            self.lineChartView.descriptionText = @"折线图";                              // 折线图描述
            self.lineChartView.descriptionFont = [UIFont systemFontOfSize:15];          // 折线图描述字体
            self.lineChartView.descriptionTextColor = [UIColor darkGrayColor];          // 折线图描述颜色
    
            // 设置折线图图例
            self.lineChartView.legend.enabled = YES;                                    // 显示图例,默认 YES 显示
            self.lineChartView.legend.form = ChartLegendFormLine;                       // 图例的样式
            self.lineChartView.legend.formSize = 30;                                    // 图例中线条的长度
            self.lineChartView.legend.textColor = [UIColor darkGrayColor];              // 图例文字颜色
    
            // 设置动画效果,可以设置 X 轴和 Y 轴的动画效果
            [self.lineChartView animateWithXAxisDuration:1.0f];
        }
    
        // 设置折线图数据
        - (LineChartData *)setData{
    
            int vals_count = 50;                                                       // 要显示多少条数据
    
            // 设置表格数据,包含 x 值和 y 值
            NSMutableArray *chartVals1 = [[NSMutableArray alloc] init];
            for (int i = 0; i < vals_count; i  ) {
    
                double xValue = i   1;
                double yValue = arc4random() % 100;
    
                // 设置表格数据,x 轴和 y 轴的值
                ChartDataEntry *entry = [[ChartDataEntry alloc] initWithX:xValue y:yValue];
                [chartVals1 addObject:entry];
            }
    
            // 绘制折线图
            LineChartDataSet *set1 = nil;
            if (self.lineChartView.data.dataSetCount > 0) {
    
                LineChartData *data = (LineChartData *)self.lineChartView.data;
                set1 = (LineChartDataSet *)data.dataSets[0];
                set1.values = chartVals1;
                // set1.valueFormatter = [[ChartMaxDataValueFormatter alloc] initWithYDataVals:chartVals1];  // 设置数据显示的格式,只显示最大值
                return data;
    
            } else {
    
                // 创建 LineChartDataSet 对象
                set1 = [[LineChartDataSet alloc] initWithValues:chartVals1 label:@"lineName 1"];    // label 折线图图例名称
    
                // 设置折线的样式
                set1.lineWidth = 1.0 / [UIScreen mainScreen].scale;                     // 折线宽度
                [set1 setColor:[self colorWithHexString:@"#007FFF"]];                   // 折线颜色
                set1.drawValuesEnabled = YES;                                           // 是否在拐点处显示数据,默认 YES
                set1.valueColors = @[[UIColor brownColor]];                             // 折线拐点处显示数据的颜色
                set1.drawSteppedEnabled = NO;                                           // 是否开启绘制阶梯样式的折线图,默认 NO
                // set1.valueFormatter = [[ChartMaxDataValueFormatter alloc] initWithYDataVals:chartVals1];  // 设置数据显示的格式,只显示最大值
    
                // 折线拐点样式
                set1.drawCirclesEnabled = YES;                                          // 是否绘制拐点,默认 YES
                set1.circleRadius = 4.0f;                                               // 拐点半径
                set1.circleColors = @[[UIColor redColor], [UIColor greenColor]];        // 拐点颜色
    
                // 拐点中间的空心样式
                set1.drawCircleHoleEnabled = YES;                                       // 是否绘制中间的空心,默认 YES
                set1.circleHoleRadius = 2.0f;                                           // 空心的半径
                set1.circleHoleColor = [UIColor blackColor];                            // 空心的颜色
    
                // 折线的颜色填充样式
    
                // 第一种填充样式:单色填充
                // set1.drawFilledEnabled = YES;                                           // 是否填充颜色,默认 NO
                // set1.fillColor = [UIColor redColor];                                    // 填充颜色
                // set1.fillAlpha = 0.3;                                                   // 填充颜色的透明度
    
                // 第二种填充样式:渐变填充
                set1.drawFilledEnabled = YES;                                           // 是否填充颜色,默认 NO
                NSArray *gradientColors = @[(id)[ChartColorTemplates colorFromString:@"#FFFFFFFF"].CGColor,
                                            (id)[ChartColorTemplates colorFromString:@"#FF007FFF"].CGColor];
                CGGradientRef gradientRef = CGGradientCreateWithColors(nil, (CFArrayRef)gradientColors, nil);
                set1.fill = [ChartFill fillWithLinearGradient:gradientRef angle:90.0f]; // 赋值填充颜色对象
                CGGradientRelease(gradientRef);                                         // 释放 gradientRef
                set1.fillAlpha = 0.3f;                                                  // 透明度
    
                // 点击选中拐点的交互样式
                set1.highlightEnabled = YES;                                            // 选中拐点,是否开启高亮效果(显示十字线),默认 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];
                set2.label = @"lineName 2";
                NSMutableArray *chartVals2 = [[NSMutableArray alloc] init];
                for (int i = 0; i < vals_count; i  ) {
    
                    double xValue = i   1;
                    double yValue = arc4random() % 100;
    
                    ChartDataEntry *entry = [[ChartDataEntry alloc] initWithX:xValue y:yValue];
                    [chartVals2 addObject:entry];
                }
                set2.values = chartVals2;
                [set2 setColor:[UIColor redColor]];
                set2.drawFilledEnabled = YES;
                set2.fillColor = [UIColor redColor];
                set2.fillAlpha = 0.1;
                [dataSets addObject:set2];
    
                // 创建 LineChartData 对象, 此对象就是 lineChartView 需要最终数据对象
                LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets];
                [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:8.f]];  // 文字字体
                [data setValueTextColor:[UIColor grayColor]];                               // 文字颜色
    
                // 自定义数据显示格式
                ChartDataValueFormatter *formatter = [[ChartDataValueFormatter alloc] init];    // 统一设置数据显示的格式
                [data setValueFormatter:formatter];
    
                return data;
            }
        }
    
        #pragma mark - ChartViewDelegate
    
        // 点击选中折线拐点时回调
        - (void)chartValueSelected:(ChartViewBase * _Nonnull)chartView
                             entry:(ChartDataEntry * _Nonnull)entry
                         highlight:(ChartHighlight * _Nonnull)highlight {
    
            // 设置滑动时 Y 值标签
            self.markYLabel.text = [NSString stringWithFormat:@"%ld%%", (NSInteger)entry.y];
    
            // 将点击的数据滑动到中间
            [self.lineChartView centerViewToAnimatedWithXValue:entry.x
                                                        yValue:entry.y
                                                          axis:[self.lineChartView.data
                                                                getDataSetByIndex:highlight.dataSetIndex].axisDependency
                                                                         duration:1.0];
        }
    
        // 没有选中折线拐点时回调
        - (void)chartValueNothingSelected:(ChartViewBase * _Nonnull)chartView {
    
        }
    
        // 放大折线图时回调
        - (void)chartScaled:(ChartViewBase * _Nonnull)chartView scaleX:(CGFloat)scaleX scaleY:(CGFloat)scaleY {
    
        }
    
        // 拖拽折线图时回调
        - (void)chartTranslated:(ChartViewBase * _Nonnull)chartView dX:(CGFloat)dX dY:(CGFloat)dY {
    
        }
    
        // 懒加载滑动时 Y 值标签
        - (UILabel *)markYLabel {
    
            if (!_markYLabel) {
                _markYLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, -5, 35, 25)];
                _markYLabel.font = [UIFont systemFontOfSize:15.0];
                _markYLabel.textAlignment = NSTextAlignmentCenter;
                _markYLabel.text = @"";
                _markYLabel.textColor = [UIColor whiteColor];
                _markYLabel.backgroundColor = [UIColor grayColor];
            }
            return _markYLabel;
        }
    
        // 由十六进制创建颜色
        - (UIColor *)colorWithHexString:(NSString *)color {
    
            NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
    
            // String should be 6 or 8 characters
            if ([cString length] < 6) {
                return [UIColor clearColor];
            }
    
            // strip "0X" or "#" if it appears
            if ([cString hasPrefix:@"0X"])
                cString = [cString substringFromIndex:2];
            if ([cString hasPrefix:@"#"])
                cString = [cString substringFromIndex:1];
            if ([cString length] != 6)
                return [UIColor clearColor];
    
            // Separate into r, g, b substrings
            NSRange range;
            range.location = 0;
            range.length = 2;
    
            // r
            NSString *rString = [cString substringWithRange:range];
    
            // g
            range.location = 2;
            NSString *gString = [cString substringWithRange:range];
    
            // b
            range.location = 4;
            NSString *bString = [cString substringWithRange:range];
    
            // Scan values
            unsigned int r, g, b;
            [[NSScanner scannerWithString:rString] scanHexInt:&r];
            [[NSScanner scannerWithString:gString] scanHexInt:&g];
            [[NSScanner scannerWithString:bString] scanHexInt:&b];
            return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f];
        }
    
        @end
    
    • 效果

      彩民之家论坛9066777 4 彩民之家论坛9066777 5

  • 比如绘制光滑的曲线图,能够设置 set 的 mode 值为 LineChartModeCubicBezier,不安装 drawValuesEnabled 的值。

        // 绘制光滑曲线
        set1.mode = LineChartModeCubicBezier;
        set1.cubicIntensity = 0.2;
    
        // 是否开启绘制阶梯样式的折线图,默认 NO
        // set1.drawSteppedEnabled = NO;
    
    • 效果

      彩民之家论坛9066777 6 彩民之家论坛9066777 7

率先先看一下功力:

前言


快到双十一了,又到了一年一度的情景交融的时候了.对象,作为本土冒的自家只得在是JavaScript只怕是OC创建三个目的了....可是希望具备程序员(媛)能在双十一得逞脱单,往爱情的征途前进进一步.在那一个奇异的小日子即以后到的时候,大家说说关于JavaScript对象相关的内容.

彩民之家论坛9066777 8

</br>

3.1 LineChart 设置

  • 1、属性设置

    • 在调控器中大家先是供给创建一个 LineChartView 的指标,在 Charts 框架中折线图用到的类是 LineChartView。

          self.lineChartView = [[LineChartView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width - 10, 400)];
          self.lineChartView.center = self.view.center;
          [self.view addSubview:self.lineChartView];
      
          // 设置基本样式
          self.lineChartView.backgroundColor = [UIColor colorWithRed:230/255.0f green:253/255.0f blue:253/255.0f alpha:1];
          self.lineChartView.delegate = self;                                         // 设置代理,需遵守 ChartViewDelegate 协议
          self.lineChartView.noDataText = @"暂无数据";
      
          // 设置交互样式
          self.lineChartView.scaleYEnabled = NO;                                      // 取消 Y 轴缩放
          self.lineChartView.doubleTapToZoomEnabled = NO;                             // 取消双击缩放
          self.lineChartView.dragEnabled = YES;                                       // 启用拖拽图标
          self.lineChartView.dragDecelerationEnabled = YES;                           // 拖拽后是否有惯性效果
          self.lineChartView.dragDecelerationFrictionCoef = 0.9;                      // 拖拽后惯性效果的摩擦系数(0~1),数值越小,惯性越不明显
      
    • 在 LineChartView 中有五个属性 rightAxis 和 leftAxis 属于 ChartYAxis 类,是个别用来安装左侧 Y 轴和右边手 Y 轴的,能够依附自个儿的急需去设置。

          self.lineChartView.rightAxis.enabled = NO;                                  // 不绘制右边轴
          ChartYAxis *leftAxis = self.lineChartView.leftAxis;                         // 获取左边 Y 轴
          leftAxis.inverted = NO;                                                     // 是否将 Y 轴进行上下翻转
          leftAxis.axisMinValue = 0;                                                  // 设置 Y 轴的最小值
          leftAxis.axisMaxValue = 105;                                                // 设置 Y 轴的最大值
          leftAxis.axisLineWidth = 1.0 / [UIScreen mainScreen].scale;                 // 设置 Y 轴线宽
          leftAxis.axisLineColor = [UIColor blackColor];                              // 设置 Y 轴颜色
          leftAxis.labelPosition = YAxisLabelPositionOutsideChart;                    // label 文字位置
          leftAxis.valueFormatter = [[YAxisValueFormatter alloc] init];               // label 文字样式,自定义格式,默认时不显示特殊符号
          leftAxis.labelTextColor = [self colorWithHexString:@"#057748"];             // label 文字颜色
          leftAxis.labelFont = [UIFont systemFontOfSize:10.0f];                       // label 文字字体
          leftAxis.labelCount = 5;                                                    // label 数量,数值不一定,
                                                                                      // 如果 forceLabelsEnabled 等于 YES,
                                                                                      // 则强制绘制制定数量的 label, 但是可能不平均
          leftAxis.forceLabelsEnabled = NO;                                           // 不强制绘制指定数量的 label
          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;                                        // 网格线开启抗锯齿
      
    • 在这里要注意的是,一般情形下 y 轴的数据是 double 类型的还借使从未特殊符号的,假若想要做到像图中的那样的百分比门类是要去设置的,然后大家开采ChartYAxis 类中有叁个性格valueFormatter,那个性子就是用来安装数据格式的,但正如费心的是以此个性必需遵循IChartAxisValueFormatter 的合计,所以大家要求去自定义一个YAxisValueFormatter 类来成功。

          @import Charts;
      
          @interface YAxisValueFormatter : NSObject <IChartAxisValueFormatter>
      
          @end
      
          @implementation YAxisValueFormatter
      
          /// 实现协议方法,返回 y 轴的数据
          - (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis {
      
              // value 为 y 轴的值
      
              return [NSString stringWithFormat:@"%ld%%",(NSInteger)value];
          }
      
          @end
      
    • y 轴设置完了,未来我们来安装 x 轴,在 LineChartView 中也可以有个属性 xAxis 使用来安装 x 轴的体制的,它属于 ChartXAxis 类,未来大家来创建它。

          ChartXAxis *xAxis = self.lineChartView.xAxis;
          xAxis.labelPosition = XAxisLabelPositionBottom;                             // 设置 X 轴的显示位置,默认是显示在上面的
          xAxis.axisLineWidth = 1.0 / [UIScreen mainScreen].scale;                    // 设置 X 轴线宽
          xAxis.axisLineColor = [UIColor blackColor];                                 // 设置 X 轴颜色
          xAxis.granularityEnabled = YES;                                             // 设置重复的值不显示
          xAxis.valueFormatter = [[XAxisValueFormatter alloc] init];                  // label 文字样式,自定义格式,默认时不显示特殊符号
          xAxis.labelTextColor = [self colorWithHexString:@"#057748"];                // label 文字颜色
          xAxis.drawGridLinesEnabled = NO;                                            // 不绘制网格线
          xAxis.gridColor = [UIColor clearColor];                                     // 网格线颜色
      
    • 一样的形似情状下 x 轴的多少也是 double 类型的还假诺一向不特殊符号的,所以我们供给去自定义一个XAxisValueFormatter 类来完毕。

          #import <Foundation/Foundation.h>
      
          @import Charts;
      
          @interface XAxisValueFormatter : NSObject <IChartAxisValueFormatter>
      
          @end
      
          @implementation XAxisValueFormatter
      
          /// 实现协议方法,返回 x 轴的数据
          - (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis {
      
              // value 为 x 轴的值
      
              return [NSString stringWithFormat:@"%ld天", (NSInteger)value];
          }
      
          @end
      
    • 到这里我们 lineChartView 的 x 轴和 y 轴都设置好了,不过还少了四个中选数据滑动的时候值会变化的价签, LineChartView 中有个 marker 属性就是我们要找的,marker 属性遵从IChart马克尔 左券,是 id 类型,Chart马克尔View 和 Chart马克尔Image 都有坚守 IChart马克尔左券,都是足以用的,能够依附本身的需要协和挑选。

          ChartMarkerView *markerY = [[ChartMarkerView alloc] init];
          markerY.offset = CGPointMake(-999, -8);
          markerY.chartView = self.lineChartView;
          [markerY addSubview:self.markYLabel];
          self.lineChartView.marker = markerY;
      
          - (UILabel *)markYLabel {
      
              if (!_markYLabel) {
                  _markYLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, -5, 35, 25)];
                  _markYLabel.font = [UIFont systemFontOfSize:15.0];
                  _markYLabel.textAlignment = NSTextAlignmentCenter;
                  _markYLabel.text = @"";
                  _markYLabel.textColor = [UIColor whiteColor];
                  _markYLabel.backgroundColor = [UIColor grayColor];
              }
              return _markYLabel;
          }
      
  • 2、数据设置

    • 折线图的数码 data 属性是属于 LineChartData 类,所以 setData 方法供给回到三个 LineChartData 的目的,不过在 LineChartData 的目的的初叶化方法中 - (nonnull instancetype)initWithDataSets:(NSArray<id <IChartDataSet>> * _Nullable)dataSets 开采还须求叁个兼有 LineChartDataSet 的数组,LineChartDataSet 其实正是每一条折线,而绘制每一条折线又要求多少,所以大家先从数量起头一步一步创制。

          NSMutableArray *chartVals1 = [[NSMutableArray alloc] init];
          for (int i = 0; i < vals_count; i  ) {
      
              double xValue = i   1;
              double yValue = arc4random() % 100;
      
              // 设置表格数据,x 轴和 y 轴的值
              ChartDataEntry *entry = [[ChartDataEntry alloc] initWithX:xValue y:yValue];
              [chartVals1 addObject:entry];
          }
      
    • 多少产生后,我们将在来创制折线了,创设 LineChartDataSet 对象,假如要只展现数据的最高点,须求设置 valueFormatter 和后面包车型客车一样,自定义多少个 Chart马克斯DataValueFormatter 类来变成。

          @import Charts;
      
          @interface ChartMaxDataValueFormatter : NSObject <IChartValueFormatter>
      
          - (instancetype)initWithYDataVals:(NSArray *)yVals;
      
          @end
      
          @interface ChartMaxDataValueFormatter ()
      
          @property (nonatomic, strong) NSArray *yDataValueArray;
          @property (nonatomic, assign) double maxDataSetIndex;
      
          @end
      
          @implementation ChartMaxDataValueFormatter
      
          - (instancetype)initWithYDataVals:(NSArray *)yVals {
              if (self = [super init]) {
      
                  self.yDataValueArray = yVals;
                  NSMutableArray *muArr = [NSMutableArray arrayWithArray:yVals];
                  [muArr sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
                      ChartDataEntry *entry1 =(ChartDataEntry *)obj1;
                      ChartDataEntry *entry2 =(ChartDataEntry *)obj2;
                      if (entry1.y >= entry2.y){
                          return NSOrderedAscending;
                      } else {
                          return NSOrderedDescending;
                      }
                  }];
                  self.maxDataSetIndex =((ChartDataEntry * )muArr[0]).x;
              }
              return self;
          }
      
          /// 实现协议方法,只显示折线上数据的最大值
          - (NSString * _Nonnull)stringForValue:(double)value 
                                          entry:(ChartDataEntry * _Nonnull)entry 
                                   dataSetIndex:(NSInteger)dataSetIndex 
                                viewPortHandler:(ChartViewPortHandler * _Nullable)viewPortHandler {
      
              if (entry.x == self.maxDataSetIndex) {
                  return [NSString stringWithFormat:@"%ld%%", (NSInteger)entry.y];
              } else {
                  return @"";
              }
          }
      
          @end
      
    • 最终还会有个 ChartView 的入选数据代理方法,主要用于呈现选中折线数据的时候 label 值的退换。

          - (void)chartValueSelected:(ChartViewBase * _Nonnull)chartView
                               entry:(ChartDataEntry * _Nonnull)entry
                           highlight:(ChartHighlight * _Nonnull)highlight {
      
              // 设置滑动时 Y 值标签
              self.markYLabel.text = [NSString stringWithFormat:@"%ld%%", (NSInteger)entry.y];
      
              // 将点击的数据滑动到中间
              [self.lineChartView centerViewToAnimatedWithXValue:entry.x
                                                          yValue:entry.y
                                                            axis:[self.lineChartView.data
                                                                  getDataSetByIndex:highlight.dataSetIndex].axisDependency
                                                                           duration:1.0];
          }
      
self.pieChartView = [[PieChartView alloc] init];self.pieChartView.backgroundColor = BgColor;[self.view addSubview:self.pieChartView];[self.pieChartView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake); make.center.mas_equalTo(self.view);}];

</br>

5、绘制饼图

  • ChartDataValueFormatter.h

        /// 设置 折线显示的 数据格式
    
        @import Charts;
    
        @interface ChartDataValueFormatter : NSObject <IChartValueFormatter>
    
        @end
    
  • ChartDataValueFormatter.m

        @implementation ChartDataValueFormatter
    
        /// 实现协议方法,返回折线拐点上显示的数据格式
        - (NSString * _Nonnull)stringForValue:(double)value
                                        entry:(ChartDataEntry * _Nonnull)entry
                                 dataSetIndex:(NSInteger)dataSetIndex
                              viewPortHandler:(ChartViewPortHandler * _Nullable)viewPortHandler {
    
            return [NSString stringWithFormat:@"%.0f%%", entry.y];
        }
    
        @end
    
  • ViewController.m

        #import "ChartsDemo-Bridging-Header.h"
    
        // 自定义数据格式
        #import "ChartDataValueFormatter.h"
    
        // 遵守协议
        @interface ViewController () <ChartViewDelegate>
    
        // 饼状图
        @property (nonatomic, strong) PieChartView *pieChartView;
    
        @end
    
        @implementation ViewController
    
        - (void)viewDidLoad {
            [super viewDidLoad];
    
            self.view.backgroundColor = [UIColor colorWithRed:230/255.0f green:253/255.0f blue:253/255.0f alpha:1];
    
            // 创建饼状图
            [self createdPieView];
    
            // 设置饼状图的数据
            self.pieChartView.data = [self setData];
        }
    
        // 创建饼状图
        - (void)createdPieView {
    
            // 初始化饼状图对象
            self.pieChartView = [[PieChartView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width - 10, 400)];
            self.pieChartView.center = self.view.center;
            [self.view addSubview:self.pieChartView];
    
            // 设置基本样式
            self.pieChartView.backgroundColor = [UIColor colorWithRed:230/255.0f green:253/255.0f blue:253/255.0f alpha:1];
            self.pieChartView.delegate = self;                                          // 设置代理,需遵守 ChartViewDelegate 协议
            self.pieChartView.noDataText = @"暂无数据";                                   // 没有数据时的文字提示
            [self.pieChartView setExtraOffsetsWithLeft:30 top:0 right:30 bottom:0];     // 饼状图距离边缘的间隙
            self.pieChartView.usePercentValuesEnabled = YES;                            // 是否根据所提供的数据, 将显示数据转换为百分比格式
            self.pieChartView.drawSliceTextEnabled = YES;                               // 是否显示区块文本
    
            // 设置交互样式
            self.pieChartView.dragDecelerationEnabled = YES;                            // 拖拽后是否有惯性效果
            self.pieChartView.dragDecelerationFrictionCoef = 0.9;                       // 拖拽后惯性效果的摩擦系数(0~1),数值越小,惯性越不明显
    
            // 设置饼状图中间的空心样式
            // 空心有两个圆组成, 一个是 hole, 一个是 transparentCircle, transparentCircle 里面是 hole
            self.pieChartView.drawHoleEnabled = YES;                                    // 饼状图是否是空心
            self.pieChartView.holeColor = [UIColor clearColor];                         // 空心颜色
            self.pieChartView.holeRadiusPercent = 0.5;                                  // 空心半径占比
            self.pieChartView.transparentCircleRadiusPercent = 0.52;                    // 半透明空心半径占比
            self.pieChartView.transparentCircleColor = [UIColor colorWithRed:210/255.0 green:145/255.0 blue:165/255.0 alpha:0.3];
                                                                                        // 半透明空心的颜色
            // 设置饼状图中心的文本
            if (self.pieChartView.isDrawHoleEnabled == YES) {
    
                self.pieChartView.drawCenterTextEnabled = YES;                          // 是否显示中间文字
    
                // 普通文本
                // self.pieChartView.centerText = @"饼状图";                             // 中间文字
    
                // 富文本
                NSMutableAttributedString *centerText = [[NSMutableAttributedString alloc] initWithString:@"饼状图"];
                [centerText setAttributes:@{NSFontAttributeName: [UIFont boldSystemFontOfSize:16],
                                            NSForegroundColorAttributeName: [UIColor orangeColor]}
                                    range:NSMakeRange(0, centerText.length)];
                self.pieChartView.centerAttributedText = centerText;
            }
    
            // 设置饼状图描述
            self.pieChartView.chartDescription.enabled = YES;                           // 显示饼状图描述,默认 YES 显示
            self.pieChartView.descriptionText = @"饼状图";
            self.pieChartView.descriptionFont = [UIFont systemFontOfSize:15];
            self.pieChartView.descriptionTextColor = [UIColor grayColor];
    
            // 设置饼状图图例
            self.pieChartView.legend.enabled = YES;                                     // 显示图例,默认 YES 显示
            self.pieChartView.legend.form = ChartLegendFormCircle;                      // 图示样式: 方形、线条、圆形
            self.pieChartView.legend.formSize = 12;                                     // 图示大小
            self.pieChartView.legend.position = ChartLegendPositionBelowChartCenter;    // 图例在饼状图中的位置
            self.pieChartView.legend.maxSizePercent = 1;                                // 图例在饼状图中的大小占比, 这会影响图例的宽高
            self.pieChartView.legend.formToTextSpace = 5;                               // 文本间隔
            self.pieChartView.legend.font = [UIFont systemFontOfSize:10];               // 字体大小
            self.pieChartView.legend.textColor = [UIColor grayColor];                   // 字体颜色
    
            // 设置动画效果,可以设置 X 轴和 Y 轴的动画效果
            [self.pieChartView animateWithYAxisDuration:1.0f];
        }
    
        // 设置饼状图数据
        - (PieChartData *)setData {
    
            int vals_count = 5;                                                         // 饼状图总共有几块组成
    
            // 每个区块的数据,包含 区块名称 和 区块数据
            NSMutableArray *chartVals1 = [[NSMutableArray alloc] init];
            for (int i = 0; i < vals_count; i  ) {
    
                NSString *partLabel = [NSString stringWithFormat:@"part%d", i];         // 设置区块名称
                double partValue = arc4random() % 100;                                  // 设置区块值
    
                PieChartDataEntry *entry = [[PieChartDataEntry alloc] initWithValue:partValue label:partLabel];
                [chartVals1 addObject:entry];
            }
    
            // 绘制饼状图
    
            // 创建 PieChartDataSet 对象
            PieChartDataSet *set1 = [[PieChartDataSet alloc] initWithValues:chartVals1 label:nil];
    
            // 设置区块
            NSMutableArray *colors = [[NSMutableArray alloc] init];
            [colors addObjectsFromArray:ChartColorTemplates.vordiplom];
            [colors addObjectsFromArray:ChartColorTemplates.joyful];
            [colors addObjectsFromArray:ChartColorTemplates.colorful];
            [colors addObjectsFromArray:ChartColorTemplates.liberty];
            [colors addObjectsFromArray:ChartColorTemplates.pastel];
            [colors addObject:[UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f]];
            set1.colors = colors;                                                       // 设置区块颜色
            set1.sliceSpace = 0;                                                        // 相邻区块之间的间距
            set1.selectionShift = 8;                                                    // 选中区块时, 放大的半径
    
            // 设置区块名称
            set1.xValuePosition = PieChartValuePositionInsideSlice;                     // 区块名称位置
            set1.entryLabelColor = [UIColor redColor];                                  // 区块名称颜色
            set1.entryLabelFont = [UIFont systemFontOfSize:15];                         // 区块名称字体
    
            // 设置区块数据
            set1.drawValuesEnabled = YES;                                               // 是否绘制显示数据
            set1.yValuePosition = PieChartValuePositionOutsideSlice;                    // 区块数据位置
    
            // 数据与区块之间的用于指示的折线样式
            set1.valueLinePart1OffsetPercentage = 0.85;                     // 折线中第一段起始位置相对于区块的偏移量, 数值越大, 折线距离区块越远
            set1.valueLinePart1Length = 0.5;                                            // 折线中第一段长度占比
            set1.valueLinePart2Length = 0.4;                                            // 折线中第二段长度最大占比
            set1.valueLineWidth = 1;                                                    // 折线的粗细
            set1.valueLineColor = [UIColor brownColor];                                 // 折线颜色
    
            // 将 PieChartDataSet 对象放入数组中
            NSMutableArray *dataSets = [[NSMutableArray alloc] init];
            [dataSets addObject:set1];
    
            // 创建 PieChartData 对象, 此对象就是 PieChartData 需要最终数据对象
            PieChartData *data = [[PieChartData alloc] initWithDataSets:dataSets];
            [data setValueFont:[UIFont systemFontOfSize:10]];
            [data setValueTextColor:[UIColor brownColor]];
    
            // 自定义数据显示格式
            ChartDataValueFormatter *formatter = [[ChartDataValueFormatter alloc] init];// 统一设置数据显示的格式
            [data setValueFormatter:formatter];
    
            return data;
        }
    
        #pragma mark - ChartViewDelegate
    
        // 点击选中柱形图时的代理方法
        - (void)chartValueSelected:(ChartViewBase * _Nonnull)chartView
                             entry:(ChartDataEntry * _Nonnull)entry
                         highlight:(ChartHighlight * _Nonnull)highlight {
    
        }
    
        // 没有选中柱形图时的代理方法,当选中一个柱形图后,在空白处双击,就可以取消选择,此时会回调此方法
        - (void)chartValueNothingSelected:(ChartViewBase * _Nonnull)chartView {
    
        }
    
        // 捏合放大或缩小柱形图时的代理方法
        - (void)chartScaled:(ChartViewBase * _Nonnull)chartView scaleX:(CGFloat)scaleX scaleY:(CGFloat)scaleY {
    
        }
    
        // 拖拽图表时的代理方法
        - (void)chartTranslated:(ChartViewBase * _Nonnull)chartView dX:(CGFloat)dX dY:(CGFloat)dY {
    
        }
    
        @end
    
    • 效果

      彩民之家论坛9066777 9 彩民之家论坛9066777 10

  • 万一没有必要空心样式的饼状图, 能够将饼状图的 drawHoleEnabled 赋值为 NO, 将中间的文本去掉就能够。

        // 饼状图是否是空心
        self.pieChartView.drawHoleEnabled = NO;
    
    • 效果

      彩民之家论坛9066777 11 彩民之家论坛9066777 12

  • 每一个区块之间若是必要间距, 能够透过 dataSet 对象的 sliceSpace 属性设置,

        // 相邻区块之间的间距
        set1.sliceSpace = 4;
    
    • 效果

      彩民之家论坛9066777 13 彩民之家论坛9066777 14

3. 安装饼状图主旨的文书

当饼状图是空心样式时, 能够在饼状图宗旨添Gavin本, 添Gavin本有三种方法. 一种艺术是利用centerText 属性加多, 这种格局不可能安装字体颜色、大小等. 另一种艺术是使用centerAttributedText属性加多, 这种格局增加的富文本, 由此就足以对字体举办更为美化了. 代码如下:

if (self.pieChartView.isDrawHoleEnabled == YES) { self.pieChartView.drawCenterTextEnabled = YES;//是否显示中间文字 //普通文本// self.pieChartView.centerText = @"饼状图";//中间文字 //富文本 NSMutableAttributedString *centerText = [[NSMutableAttributedString alloc] initWithString:@"饼状图"]; [centerText setAttributes:@{NSFontAttributeName: [UIFont boldSystemFontOfSize:16], NSForegroundColorAttributeName: [UIColor orangeColor]} range:NSMakeRange(0, centerText.length)]; self.pieChartView.centerAttributedText = centerText;}
日期

日子对象也是一种比较常用的目的类型.大家创立一个日子对象,要是不对那些目的实行其余赋值操作,那么它暗中同意的正是时下日子,如下所示.

        var nowDate = new Date;
        document.write("<br>" nowDate);

效果如下所示.

彩民之家论坛9066777 15

与OC类似,大家得以经过set/get方法分别对当前的date对象设置时间和得到时间.常用艺术列表如下所示.

名称 设置(输入参数) 获取(具有返回值)
setDate() getDate()
setMonth() getMonth()
setFullYear() getFullYear()
星期几 setDay() getDay()
setHours() getHours()
setMinutes() getMinutes()
setSeconds() getSeconds()
毫秒 setMilliseconds() getMilliseconds()
距1970.1.1的毫秒数 setTime() parse()
时间部分字符串 toTimeString()
日期部分字符串 toDateString()

举例我们设置天以及获得天数,代码如下所示.页面当然便是彰显7了.

        var nowDate = new Date;
        nowDate.setDate(7);
        document.write("<br>" nowDate.getDate());

</br>

4、绘制柱状图

  • XAxisValueFormatter.h

        /// 设置 X 轴 数据格式
    
        @import Charts;
    
        @interface XAxisValueFormatter : NSObject <IChartAxisValueFormatter>
    
        @end
    
  • XAxisValueFormatter.m

        @implementation XAxisValueFormatter
    
        /// 实现协议方法,返回 x 轴的数据
        - (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis {
    
            // value 为 x 轴的值
    
            return [NSString stringWithFormat:@"%ld天", (NSInteger)value];
        }
    
        @end
    
  • YAxisValueFormatter.h

        /// 设置 Y 轴 数据格式
    
        @import Charts;
    
        @interface YAxisValueFormatter : NSObject <IChartAxisValueFormatter>
    
        @end
    
  • YAxisValueFormatter.m

        @implementation YAxisValueFormatter
    
        /// 实现协议方法,返回 y 轴的数据
        - (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis {
    
            // value 为 y 轴的值
    
            return [NSString stringWithFormat:@"%ld%%",(NSInteger)value];
        }
    
        @end
    
  • ChartDataValueFormatter.h

        /// 设置 柱形上显示的 数据格式
    
        @import Charts;
    
        @interface ChartDataValueFormatter : NSObject <IChartValueFormatter>
    
        @end
    
  • ChartDataValueFormatter.m

        @implementation ChartDataValueFormatter
    
        /// 实现协议方法,返回柱形上显示的数据格式
        - (NSString * _Nonnull)stringForValue:(double)value
                                        entry:(ChartDataEntry * _Nonnull)entry
                                 dataSetIndex:(NSInteger)dataSetIndex
                              viewPortHandler:(ChartViewPortHandler * _Nullable)viewPortHandler {
    
            return [NSString stringWithFormat:@"%.1f", entry.y];
        }
    
        @end
    
  • ChartMaxDataValueFormatter.h

        /// 设置 柱形上显示的 数据格式,只显示最大值
    
        @import Charts;
    
        @interface ChartMaxDataValueFormatter : NSObject <IChartValueFormatter>
    
        - (instancetype)initWithYDataVals:(NSArray *)yVals;
    
        @end
    
  • ChartMaxDataValueFormatter.m

        @interface ChartMaxDataValueFormatter ()
    
        @property (nonatomic, strong) NSArray *yDataValueArray;
        @property (nonatomic, assign) double maxDataSetIndex;
    
        @end
    
        @implementation ChartMaxDataValueFormatter
    
        - (instancetype)initWithYDataVals:(NSArray *)yVals {
            if (self = [super init]) {
    
                self.yDataValueArray = yVals;
                NSMutableArray *muArr = [NSMutableArray arrayWithArray:yVals];
                [muArr sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
                    ChartDataEntry *entry1 =(ChartDataEntry *)obj1;
                    ChartDataEntry *entry2 =(ChartDataEntry *)obj2;
                    if (entry1.y >= entry2.y){
                        return NSOrderedAscending;
                    } else {
                        return NSOrderedDescending;
                    }
                }];
                self.maxDataSetIndex =((ChartDataEntry * )muArr[0]).x;
            }
            return self;
        }
    
        /// 实现协议方法,只显示柱形上数据的最大值
        - (NSString * _Nonnull)stringForValue:(double)value
                                        entry:(ChartDataEntry * _Nonnull)entry
                                 dataSetIndex:(NSInteger)dataSetIndex
                              viewPortHandler:(ChartViewPortHandler * _Nullable)viewPortHandler {
    
            if (entry.x == self.maxDataSetIndex) {
                return [NSString stringWithFormat:@"%ld%%", (NSInteger)entry.y];
            } else {
                return @"";
            }
        }
    
        @end
    
  • ViewController.m

        #import "ChartsDemo-Bridging-Header.h"
    
        // 自定义数据格式
        #import "YAxisValueFormatter.h"
        #import "XAxisValueFormatter.h"
        #import "ChartDataValueFormatter.h"
        #import "ChartMaxDataValueFormatter.h"
    
        // 遵守协议
        @interface ViewController () <ChartViewDelegate>
    
        // 柱状图
        @property (nonatomic, strong) BarChartView *barChartView;
    
        // 滑动时 Y 值标签
        @property (nonatomic,strong) UILabel *markYLabel;
    
        @end
    
        @implementation ViewController
    
        - (void)viewDidLoad {
            [super viewDidLoad];
    
            self.view.backgroundColor = [UIColor colorWithRed:230/255.0f green:253/255.0f blue:253/255.0f alpha:1];
    
            // 创建柱状图
            [self createdBarView];
    
            // 设置柱状图的数据
            self.barChartView.data = [self setData];
        }
    
        // 创建柱状图
        - (void)createdBarView {
    
            // 初始化柱状图对象
            self.barChartView = [[BarChartView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width - 10, 400)];
            self.barChartView.center = self.view.center;
            [self.view addSubview:self.barChartView];
    
            // 设置基本样式
            self.barChartView.backgroundColor = [UIColor colorWithRed:230/255.0f green:253/255.0f blue:253/255.0f alpha:1];
            self.barChartView.delegate = self;                                          // 设置代理,需遵守 ChartViewDelegate 协议
            self.barChartView.noDataText = @"暂无数据";                                   // 没有数据时的文字提示
            self.barChartView.drawValueAboveBarEnabled = YES;                           // 数值显示在柱形的上面还是下面
            self.barChartView.drawBarShadowEnabled = NO;                                // 是否绘制柱形的阴影背景
    
            // 设置交互样式
            self.barChartView.scaleYEnabled = NO;                                       // 取消 Y 轴缩放
            self.barChartView.doubleTapToZoomEnabled = NO;                              // 取消双击缩放
            self.barChartView.dragEnabled = YES;                                        // 启用拖拽图标
            self.barChartView.dragDecelerationEnabled = YES;                            // 拖拽后是否有惯性效果
            self.barChartView.dragDecelerationFrictionCoef = 0.9;                       // 拖拽后惯性效果的摩擦系数(0~1),数值越小,惯性越不明显
    
            // 设置滑动时 Y 值标签
            ChartMarkerView *markerY = [[ChartMarkerView alloc] init];
            markerY.offset = CGPointMake(-17, -25);                                     // 设置显示位置
            markerY.chartView = self.barChartView;
            [markerY addSubview:self.markYLabel];
            self.barChartView.marker = markerY;
    
            // 设置 X 轴样式
            ChartXAxis *xAxis = self.barChartView.xAxis;
            xAxis.labelPosition = XAxisLabelPositionBottom;                             // 设置 X 轴的显示位置,默认是显示在上面的
            xAxis.axisLineWidth = 1.0 / [UIScreen mainScreen].scale;                    // 设置 X 轴线宽
            xAxis.axisLineColor = [UIColor blackColor];                                 // 设置 X 轴颜色
            xAxis.valueFormatter = [[XAxisValueFormatter alloc] init];                  // label 文字样式,自定义格式,默认时不显示特殊符号
            xAxis.labelTextColor = [UIColor brownColor];                                // label 文字颜色
            xAxis.drawGridLinesEnabled = NO;                                            // 不绘制网格线
            xAxis.gridColor = [UIColor clearColor];                                     // 网格线颜色
    
            // 设置 Y 轴样式
            self.barChartView.rightAxis.enabled = NO;                                   // 不绘制右边轴
            ChartYAxis *leftAxis = self.barChartView.leftAxis;                          // 获取左边 Y 轴
            leftAxis.inverted = NO;                                                     // 是否将 Y 轴进行上下翻转
            leftAxis.axisMinValue = 0;                                                  // 设置 Y 轴的最小值
            leftAxis.axisMaxValue = 105;                                                // 设置 Y 轴的最大值
            leftAxis.axisLineWidth = 1.0 / [UIScreen mainScreen].scale;                 // 设置 Y 轴线宽
            leftAxis.axisLineColor = [UIColor blackColor];                              // 设置 Y 轴颜色
            leftAxis.labelPosition = YAxisLabelPositionOutsideChart;                    // label 文字位置
            leftAxis.valueFormatter = [[YAxisValueFormatter alloc] init];               // label 文字样式,自定义格式,默认时不显示特殊符号
            leftAxis.labelTextColor = [UIColor brownColor];                             // label 文字颜色
            leftAxis.labelFont = [UIFont systemFontOfSize:10.0f];                       // label 文字字体
            leftAxis.labelCount = 5;                                                    // label 数量,数值不一定,
                                                                                        // 如果 forceLabelsEnabled 等于 YES,
                                                                                        // 则强制绘制制定数量的 label, 但是可能不平均
            leftAxis.forceLabelsEnabled = NO;                                           // 不强制绘制指定数量的 label
            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;                                        // 网格线开启抗锯齿
    
            // 添加限制线
            ChartLimitLine *limitLine = [[ChartLimitLine alloc] initWithLimit:80 label:@"限制线"];     // 设置限制值和标题
            limitLine.lineWidth = 2;                                                    // 限制线的宽度
            limitLine.lineColor = [UIColor greenColor];                                 // 限制线的颜色
            limitLine.lineDashLengths = @[@5.0f, @5.0f];                                // 虚线样式
            limitLine.labelPosition = ChartLimitLabelPositionRightTop;                  // label 位置
            limitLine.valueTextColor = [UIColor grayColor];                             // label 文字颜色
            limitLine.valueFont = [UIFont systemFontOfSize:12];                         // label 字体
            [leftAxis addLimitLine:limitLine];                                          // 添加到 Y 轴上
            leftAxis.drawLimitLinesBehindDataEnabled = YES;                             // 设置限制线绘制在柱状图的下面
    
            // 设置柱状图描述
            self.barChartView.chartDescription.enabled = YES;                           // 显示柱状图描述,默认 YES 显示
            self.barChartView.descriptionText = @"柱状图";                               // 柱状图描述
            self.barChartView.descriptionFont = [UIFont systemFontOfSize:15];           // 柱状图描述字体
            self.barChartView.descriptionTextColor = [UIColor darkGrayColor];           // 柱状图描述颜色
    
            // 设置柱状图图例
            self.barChartView.legend.enabled = NO;                                      // 显示图例,默认 YES 显示
    
            // 设置动画效果,可以设置 X 轴和 Y 轴的动画效果
            [self.barChartView animateWithYAxisDuration:1.0f];
        }
    
        // 设置柱状图数据
        - (BarChartData *)setData {
    
            int vals_count = 50;                                                        // 要显示多少条数据
    
            // 设置表格数据,包含 x 值和 y 值
            NSMutableArray *chartVals1 = [[NSMutableArray alloc] init];
            for (int i = 0; i < vals_count; i  ) {
    
                double xValue = i   1;
                double yValue = arc4random() % 100;
    
                // 设置表格数据,x 轴和 y 轴的值
                BarChartDataEntry *entry = [[BarChartDataEntry alloc] initWithX:xValue y:yValue];
                [chartVals1 addObject:entry];
            }
    
            // 绘制柱状图
    
            // 创建 BarChartDataSet 对象
            BarChartDataSet *set1 = [[BarChartDataSet alloc] initWithValues:chartVals1 label:nil];
    
            // 设置柱形的样式
            [set1 setColors:ChartColorTemplates.material];                              // 设置柱形图颜色
            set1.drawValuesEnabled = YES;                                               // 是否显示数据,默认 YES
            set1.valueColors = @[[UIColor brownColor]];                                 // 显示数据的颜色
            set1.highlightEnabled = YES;                                                // 点击选中柱形图是否有高亮效果,(双击空白处取消选中)
            // set1.valueFormatter = [[ChartMaxDataValueFormatter alloc] initWithYDataVals:chartVals1];    // 设置数据显示的格式,只显示最大值
    
            // 将 BarChartDataSet 对象放入数组中
            NSMutableArray *dataSets = [[NSMutableArray alloc] init];
            [dataSets addObject:set1];
    
            // 创建 BarChartData 对象, 此对象就是 BarChartData 需要最终数据对象
            BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets];
            [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:8.f]];  // 文字字体
            [data setValueTextColor:[UIColor grayColor]];                               // 文字颜色
    
            // 自定义数据显示格式
            ChartDataValueFormatter *formatter = [[ChartDataValueFormatter alloc] init];// 统一设置数据显示的格式
            [data setValueFormatter:formatter];
    
            return data;
        }
    
        #pragma mark - ChartViewDelegate
    
        // 点击选中柱形图时的代理方法
        - (void)chartValueSelected:(ChartViewBase * _Nonnull)chartView
                             entry:(ChartDataEntry * _Nonnull)entry
                         highlight:(ChartHighlight * _Nonnull)highlight {
    
            // 设置滑动时 Y 值标签
            self.markYLabel.text = [NSString stringWithFormat:@"%ld%%", (NSInteger)entry.y];
    
            // 将点击的数据滑动到中间
            [self.barChartView centerViewToAnimatedWithXValue:entry.x
                                                       yValue:entry.y
                                                         axis:[self.barChartView.data
                                                                getDataSetByIndex:highlight.dataSetIndex].axisDependency
                                                     duration:1.0];
        }
    
        // 没有选中柱形图时的代理方法,当选中一个柱形图后,在空白处双击,就可以取消选择,此时会回调此方法
        - (void)chartValueNothingSelected:(ChartViewBase * _Nonnull)chartView {
    
        }
    
        // 捏合放大或缩小柱形图时的代理方法
        - (void)chartScaled:(ChartViewBase * _Nonnull)chartView scaleX:(CGFloat)scaleX scaleY:(CGFloat)scaleY {
    
        }
    
        // 拖拽图表时的代理方法
        - (void)chartTranslated:(ChartViewBase * _Nonnull)chartView dX:(CGFloat)dX dY:(CGFloat)dY {
    
        }
    
        // 懒加载滑动时 Y 值标签
        - (UILabel *)markYLabel {
    
            if (!_markYLabel) {
                _markYLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, -5, 35, 25)];
                _markYLabel.font = [UIFont systemFontOfSize:15.0];
                _markYLabel.textAlignment = NSTextAlignmentCenter;
                _markYLabel.text = @"";
                _markYLabel.textColor = [UIColor whiteColor];
                _markYLabel.backgroundColor = [UIColor grayColor];
            }
            return _markYLabel;
        }
    
        @end
    
    • 效果

      彩民之家论坛9066777 16 彩民之家论坛9066777 17

  • 假设要展现等级次序柱状图,只需求把 BarChartView 换成HorizontalBarChartView 就能够。

        // 声明柱状图
        @property (nonatomic, strong) HorizontalBarChartView *barChartView;
    
        // 初始化柱状图对象
        self.barChartView = [[HorizontalBarChartView alloc] initWithFrame:frame];
    
    • 效果

      彩民之家论坛9066777 18 彩民之家论坛9066777 19

成立饼状图对象用到类是PieChartView.h, 代码如下:

彩民之家论坛9066777 20

2、在档案的次序中集成 Charts

6. 安装饼状图图例样式
self.pieChartView.legend.maxSizePercent = 1;//图例在饼状图中的大小占比, 这会影响图例的宽高self.pieChartView.legend.formToTextSpace = 5;//文本间隔self.pieChartView.legend.font = [UIFont systemFontOfSize:10];//字体大小self.pieChartView.legend.textColor = [UIColor grayColor];//字体颜色self.pieChartView.legend.position = ChartLegendPositionBelowChartCenter;//图例在饼状图中的位置self.pieChartView.legend.form = ChartLegendFormCircle;//图示样式: 方形、线条、圆形self.pieChartView.legend.formSize = 12;//图示大小

为饼状图提供数据, 首先必要创立八个数组yValsxVals, yVals数组贮存饼状图各样区块的数目, xVals寄放的是每一种区块的称谓或许描述.接着供给用PieChartDataSet.h类创建dataSet指标, 成立时将yVals放进去.然后须求用PieChartData.h类创建data指标, 成立时将xValsdataSet目的放进去.最终直接把data指标赋值给饼状图的data品质就可以. 创建data指标代码如下:

- (PieChartData *)setData{ double mult = 100; int count = 5;//饼状图总共有几块组成 //每个区块的数据 NSMutableArray *yVals = [[NSMutableArray alloc] init]; for (int i = 0; i < count; i  ) { double randomVal = arc4random_uniform; BarChartDataEntry *entry = [[BarChartDataEntry alloc] initWithValue:randomVal xIndex:i]; [yVals addObject:entry]; } //每个区块的名称或描述 NSMutableArray *xVals = [[NSMutableArray alloc] init]; for (int i = 0; i < count; i  ) { NSString *title = [NSString stringWithFormat:@"part%d", i 1]; [xVals addObject:title]; } //dataSet PieChartDataSet *dataSet = [[PieChartDataSet alloc] initWithYVals:yVals label:@""]; dataSet.drawValuesEnabled = YES;//是否绘制显示数据 NSMutableArray *colors = [[NSMutableArray alloc] init]; [colors addObjectsFromArray:ChartColorTemplates.vordiplom]; [colors addObjectsFromArray:ChartColorTemplates.joyful]; [colors addObjectsFromArray:ChartColorTemplates.colorful]; [colors addObjectsFromArray:ChartColorTemplates.liberty]; [colors addObjectsFromArray:ChartColorTemplates.pastel]; [colors addObject:[UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f]]; dataSet.colors = colors;//区块颜色 dataSet.sliceSpace = 0;//相邻区块之间的间距 dataSet.selectionShift = 8;//选中区块时, 放大的半径 dataSet.xValuePosition = PieChartValuePositionInsideSlice;//名称位置 dataSet.yValuePosition = PieChartValuePositionOutsideSlice;//数据位置 //数据与区块之间的用于指示的折线样式 dataSet.valueLinePart1OffsetPercentage = 0.85;//折线中第一段起始位置相对于区块的偏移量, 数值越大, 折线距离区块越远 dataSet.valueLinePart1Length = 0.5;//折线中第一段长度占比 dataSet.valueLinePart2Length = 0.4;//折线中第二段长度最大占比 dataSet.valueLineWidth = 1;//折线的粗细 dataSet.valueLineColor = [UIColor brownColor];//折线颜色 //data PieChartData *data = [[PieChartData alloc] initWithXVals:xVals dataSet:dataSet]; NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; formatter.numberStyle = NSNumberFormatterPercentStyle; formatter.maximumFractionDigits = 0;//小数位数 formatter.multiplier = @1.f; [data setValueFormatter:formatter];//设置显示数据格式 [data setValueTextColor:[UIColor brownColor]]; [data setValueFont:[UIFont systemFontOfSize:10]]; return data;}

运营结果如下:

彩民之家论坛9066777 21运维结果

万一无需空心样式的饼状图, 可以将饼状图的drawHoleEnabled赋值为NO, 将中间的文件去掉就可以, 代码如下:

self.pieChartView.drawHoleEnabled = NO;

功效如下:

彩民之家论坛9066777 22实心饼状图

各样区块之间纵然须求间距, 能够因此dataSet对象的sliceSpace天性设置, 代码如下:

dataSet.sliceSpace = 3;

作用如下:

彩民之家论坛9066777 23有区块间距的饼状图

出于天性很多, 另外成效能够活动尝试.</br>Demo 地址: PieChartDemo.</br>

数组

JavaScript数组对象的创设相比轻易,如下所示.

    var myArray = new Array;
    myArray[0] = "骚栋";
    myArray[1] = "栋哥";
    myArray[2] = "宾哥";
    myArray[3] = "达哥";

数组对象所对应的主意就比较多了,这里也说一下多少个常用的.笔者就直接拿地方创造的数组来做示范表达了.

  • ###### 数组排序

数组的排序是选拔函数sort()兑现的,包罗达成字符串数组和数字数组的排序.该方法会更改原本的数组,而不会缔造新的数组.示比方下所示.

    document.write("原始数组:" "<br>" myArray   "<br>"   "<br>");
    myArray.sort();
    document.write("操作后的数组:" "<br>" myArray   "<br>");

结果如下所示.

彩民之家论坛9066777 24

  • ###### 数组颠倒

数组颠倒主即使选用reverse()艺术用于颠尾数组七月素的顺序.该方法会退换原先的数组,而不会创制新的数组.示比如下所示.

    document.write("原始数组:" "<br>" myArray   "<br>"   "<br>");
    myArray.reverse();
    document.write("操作后的数组:" "<br>" myArray   "<br>");

结果如下所示.

彩民之家论坛9066777 25

  • ###### 数组删除/插入成分

OC中的数组插入和删除成分完全的七个艺术,可是在JavaScript中数组的插入和删除shift用splice()那三个方式就可以化解.函数格局以及参数解释如下所示.

彩民之家论坛9066777 26

诸如我们以后要在下标为2的职位添美成分,并不删除任何原数组的任何三个因素,那么我们只须求把index设置为2,howmany参数为0,然后插入参数就能够.代码能够如下.

    document.write("原始数组:" "<br>" myArray   "<br>"   "<br>");
    myArray.splice(2,0,"三爷");
    document.write("操作后的数组:" "<br>" myArray   "<br>");

效果图如下所示.

彩民之家论坛9066777 27

再举个例子,大家只想删除从下标2开首的多个成分,那么大家的代码操作就足以如下所示.

    document.write("原始数组:" "<br>" myArray   "<br>"   "<br>");
    myArray.splice(2,2);
    document.write("操作后的数组:" "<br>" myArray   "<br>");

职能如下所示.

彩民之家论坛9066777 28

</br>

3、绘制折线图

彩民之家论坛9066777 29饼状图

JavaScript 正则表明式


JavaScript 的RegExp对象跟OC的谓词的效应大概,首若是用于字符串的相比较,在此以前笔者就在武当山论剑之iOS NSPredicate(谓词)的选用(一)写过OC的谓词使用,並且在洛迦山论剑之iOS NSPredicate(谓词)的施用(二)中谈到过有关常用正则表明式的使用.今日大家说一下JS中的RegExp对象的使用.

RegExp对象成立函数实际上是有patternattributes七个参数,pattern参数用来填写正则表明式的形式或任何正则表达式.attributes参数则是三个可选的字符串,包罗属性 "g"、"i" 和 "m",分别用于钦赐全局相配、区分轻重缓急写的拾分和多行匹配。

 RegExp(pattern, attributes)

RegExp对象主要有三个方法,test()exec()以及compile().

  • test()
    test()函数检索字符串中的钦赐值,再次来到值是 true 或 false.示举例下所示.
        var searching = new RegExp('D');
        var nameString = 'ShenJingSaoDong';
        document.write(searching.test(nameString));

再次来到值为true.

  • exec()
    和test()函数分化的是,exec()即便也是搜索字符串中的钦赐值,不过它的重临值是检索值或许是null.比如,
        var searching = new RegExp('D');
        var nameString = 'ShenJingSaoDong';
        document.write(searching.exec(nameString));
  • compile()
    compile()重若是用来修改patternattributes那多个参数.例如,
        var searching = new RegExp('D');
        var nameString = 'ShenJingSaoDong';
        document.write(searching.exec(nameString));
        searching.compile('S');
        document.write(searching.exec(nameString));

</br>

1、Charts 简介

  • 使用第三方框架 Charts 绘制 iOS 图表。GitHub 源码 Charts

  • Charts 是一款用于绘制图表的框架,能够绘制柱状图、折线图、上影线图、饼状图等。Charts 独有 斯维夫特 版本。

  • LineChart (with legend, simple design)

    彩民之家论坛9066777 30

  • LineChart (with legend, simple design)

    彩民之家论坛9066777 31

  • LineChart (cubic lines)

    彩民之家论坛9066777 32

  • LineChart (gradient fill)

    彩民之家论坛9066777 33

  • Combined-Chart (bar- and linechart in this case)

    彩民之家论坛9066777 34

  • BarChart (with legend, simple design)

    彩民之家论坛9066777 35

  • BarChart (grouped DataSets)

    彩民之家论坛9066777 36

  • Horizontal-BarChart

    彩民之家论坛9066777 37

  • PieChart (with selection, ...)

    彩民之家论坛9066777 38

  • ScatterChart (with squares, triangles, circles, ... and more)

    彩民之家论坛9066777 39

  • CandleStickChart (for financial data)

    彩民之家论坛9066777 40

  • BubbleChart (area covered by bubbles indicates the value)

    彩民之家论坛9066777 41

  • RadarChart (spider web chart)

    彩民之家论坛9066777 42

4. 安装饼状图描述
self.pieChartView.descriptionText = @"饼状图示例";self.pieChartView.descriptionFont = [UIFont systemFontOfSize:10];self.pieChartView.descriptionTextColor = [UIColor grayColor];

结束


JavaScript对象的分析教学基本就到那了,这里小编说了算分享关于JavaScript对象方法的详细内容传送门

版权声明:本文由彩民之家高手论坛发布于编程技术,转载请注明出处:iOS使用Charts框架绘制—饼状图彩民之家论坛9066