博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[翻译] PNChart
阅读量:5076 次
发布时间:2019-06-12

本文共 7963 字,大约阅读时间需要 26 分钟。

PNChart

 

You can also find swift version at here 

A simple and beautiful chart lib with animation used in  and  for iOS

你也可以在这里  找到 swift 版本。

一个简单而精美的表格动画库,你可以在   与  应用中看到它的用处。

 

Requirements

PNChart works on iOS 6.0 (Begin with 0.8.2 supports iOS 8 and Later only, if you are working with iOS 6 and iOS 7, use 0.8.1 instead.) and later version and is compatible with ARC projects. It depends on the following Apple frameworks, which should already be included with most Xcode templates:

PNChart 运行在 iOS 6.0 以及以上。后续版本兼容 ARC ,它依赖于以下几个框架:

  • Foundation.framework
  • UIKit.framework
  • CoreGraphics.framework
  • QuartzCore.framework

You will need LLVM 3.0 or later in order to build PNChart.

你需要 LLVM 3.0 以及其以上版本才能够编译PNChart。

 

Usage

Cocoapods

 is the recommended way to add PNChart to your project.

我们推荐你  来将PNChart添加到你的项目当中。

  1. Add a pod entry for PNChart to your Podfile pod 'PNChart' 将'PNChart'添加到你的pod文件中
  2. Install the pod(s) by running pod install. 你需要通过 pod install 命令来安装
  3. Include PNChart wherever you need it with #import "PNChart.h". 然后,在任何你需要使用的地方,引入头文件“PNChart.h”即可

Copy the PNChart folder to your project

#import "PNChart.h"//For Line ChartPNLineChart * lineChart = [[PNLineChart alloc] initWithFrame:CGRectMake(0, 135.0, SCREEN_WIDTH, 200.0)]; [lineChart setXLabels:@[@"SEP 1",@"SEP 2",@"SEP 3",@"SEP 4",@"SEP 5"]]; // Line Chart No.1 NSArray * data01Array = @[@60.1, @160.1, @126.4, @262.2, @186.2]; PNLineChartData *data01 = [PNLineChartData new]; data01.color = PNFreshGreen; data01.itemCount = lineChart.xLabels.count; data01.getData = ^(NSUInteger index) { CGFloat yValue = [data01Array[index] floatValue]; return [PNLineChartDataItem dataItemWithY:yValue]; }; // Line Chart No.2 NSArray * data02Array = @[@20.1, @180.1, @26.4, @202.2, @126.2]; PNLineChartData *data02 = [PNLineChartData new]; data02.color = PNTwitterColor; data02.itemCount = lineChart.xLabels.count; data02.getData = ^(NSUInteger index) { CGFloat yValue = [data02Array[index] floatValue]; return [PNLineChartDataItem dataItemWithY:yValue]; }; lineChart.chartData = @[data01, data02]; [lineChart strokeChart];

#import "PNChart.h"//For BarC hartPNBarChart * barChart = [[PNBarChart alloc] initWithFrame:CGRectMake(0, 135.0, SCREEN_WIDTH, 200.0)]; [barChart setXLabels:@[@"SEP 1",@"SEP 2",@"SEP 3",@"SEP 4",@"SEP 5"]]; [barChart setYValues:@[@1, @10, @2, @6, @3]]; [barChart strokeChart];

#import "PNChart.h"//For Circle ChartPNCircleChart * circleChart = [[PNCircleChart alloc] initWithFrame:CGRectMake(0, 80.0, SCREEN_WIDTH, 100.0) total:[NSNumber numberWithInt:100] current:[NSNumber numberWithInt:60] clockwise:NO shadow:NO]; circleChart.backgroundColor = [UIColor clearColor]; [circleChart setStrokeColor:PNGreen]; [circleChart strokeChart];

# import "PNChart.h"//For Pie ChartNSArray *items = @[[PNPieChartDataItem dataItemWithValue:10 color:PNRed], [PNPieChartDataItem dataItemWithValue:20 color:PNBlue description:@"WWDC"], [PNPieChartDataItem dataItemWithValue:40 color:PNGreen description:@"GOOL I/O"], ]; PNPieChart *pieChart = [[PNPieChart alloc] initWithFrame:CGRectMake(40.0, 155.0, 240.0, 240.0) items:items]; pieChart.descriptionTextColor = [UIColor whiteColor]; pieChart.descriptionTextFont = [UIFont fontWithName:@"Avenir-Medium" size:14.0]; [pieChart strokeChart];

# import "PNChart.h"//For Scatter ChartPNScatterChart *scatterChart = [[PNScatterChart alloc] initWithFrame:CGRectMake(SCREEN_WIDTH /6.0 - 30, 135, 280, 200)]; [scatterChart setAxisXWithMinimumValue:20 andMaxValue:100 toTicks:6]; [scatterChart setAxisYWithMinimumValue:30 andMaxValue:50 toTicks:5]; NSArray * data01Array = [self randomSetOfObjects]; PNScatterChartData *data01 = [PNScatterChartData new]; data01.strokeColor = PNGreen; data01.fillColor = PNFreshGreen; data01.size = 2; data01.itemCount = [[data01Array objectAtIndex:0] count]; data01.inflexionPointStyle = PNScatterChartPointStyleCircle; __block NSMutableArray *XAr1 = [NSMutableArray arrayWithArray:[data01Array objectAtIndex:0]]; __block NSMutableArray *YAr1 = [NSMutableArray arrayWithArray:[data01Array objectAtIndex:1]]; data01.getData = ^(NSUInteger index) { CGFloat xValue = [[XAr1 objectAtIndex:index] floatValue]; CGFloat yValue = [[YAr1 objectAtIndex:index] floatValue]; return [PNScatterChartDataItem dataItemWithX:xValue AndWithY:yValue]; }; [scatterChart setup]; self.scatterChart.chartData = @[data01]; /*** this is for drawing line to compare CGPoint start = CGPointMake(20, 35); CGPoint end = CGPointMake(80, 45); [scatterChart drawLineFromPoint:start ToPoint:end WithLineWith:2 AndWithColor:PNBlack]; ***/ scatterChart.delegate = self;

 

Legend

Legend has been added to PNChart for Line and Pie Charts. Legend items position can be stacked or in series.

#import "PNChart.h"//For Line Chart//Add Line Titles for the Legend data01.dataTitle = @"Alpha"; data02.dataTitle = @"Beta Beta Beta Beta"; //Build the legend self.lineChart.legendStyle = PNLegendItemStyleSerial; self.lineChart.legendFontSize = 12.0; UIView *legend = [self.lineChart getLegendWithMaxWidth:320]; //Move legend to the desired position and add to view [legend setFrame:CGRectMake(100, 400, legend.frame.size.width, legend.frame.size.height)]; [self.view addSubview:legend]; //For Pie Chart //Build the legend self.pieChart.legendStyle = PNLegendItemStyleStacked; self.pieChart.legendFontSize = 12.0; UIView *legend = [self.pieChart getLegendWithMaxWidth:200]; //Move legend to the desired position and add to view [legend setFrame:CGRectMake(130, 350, legend.frame.size.width, legend.frame.size.height)]; [self.view addSubview:legend];

 

Update Value

Now it's easy to update value in real time

实时更新数据也是很简单的

if ([self.title isEqualToString:@"Line Chart"]) { // Line Chart #1 NSArray * data01Array = @[@(arc4random() % 300), @(arc4random() % 300), @(arc4random() % 300), @(arc4random() % 300), @(arc4random() % 300), @(arc4random() % 300), @(arc4random() % 300)]; PNLineChartData *data01 = [PNLineChartData new]; data01.color = PNFreshGreen; data01.itemCount = data01Array.count; data01.inflexionPointStyle = PNLineChartPointStyleTriangle; data01.getData = ^(NSUInteger index) { CGFloat yValue = [data01Array[index] floatValue]; return [PNLineChartDataItem dataItemWithY:yValue]; }; // Line Chart #2 NSArray * data02Array = @[@(arc4random() % 300), @(arc4random() % 300), @(arc4random() % 300), @(arc4random() % 300), @(arc4random() % 300), @(arc4random() % 300), @(arc4random() % 300)]; PNLineChartData *data02 = [PNLineChartData new]; data02.color = PNTwitterColor; data02.itemCount = data02Array.count; data02.inflexionPointStyle = PNLineChartPointStyleSquare; data02.getData = ^(NSUInteger index) { CGFloat yValue = [data02Array[index] floatValue]; return [PNLineChartDataItem dataItemWithY:yValue]; }; [self.lineChart setXLabels:@[@"DEC 1",@"DEC 2",@"DEC 3",@"DEC 4",@"DEC 5",@"DEC 6",@"DEC 7"]]; [self.lineChart updateChartData:@[data01, data02]]; } else if ([self.title isEqualToString:@"Bar Chart"]) { [self.barChart setXLabels:@[@"Jan 1",@"Jan 2",@"Jan 3",@"Jan 4",@"Jan 5",@"Jan 6",@"Jan 7"]]; [self.barChart updateChartData:@[@(arc4random() % 30),@(arc4random() % 30),@(arc4random() % 30),@(arc4random() % 30),@(arc4random() % 30),@(arc4random() % 30),@(arc4random() % 30)]]; } else if ([self.title isEqualToString:@"Circle Chart"]) { [self.circleChart updateChartByCurrent:@(arc4random() % 100)]; }

 

Callback

#import "PNChart.h"//For LineChartlineChart.delegate = self;
//For DelegateMethod-(void)userClickedOnLineKeyPoint:(CGPoint)point lineIndex:(NSInteger)lineIndex pointIndex:(NSInteger)pointIndex{    NSLog(@"Click Key on line %f, %f line index is %d and point index is %d",point.x, point.y,(int)lineIndex, (int)pointIndex); } -(void)userClickedOnLinePoint:(CGPoint)point lineIndex:(NSInteger)lineIndex{ NSLog(@"Click on line %f, %f, line index is %d",point.x, point.y, (int)lineIndex); }

 

License

This code is distributed under the terms and conditions of the .

 

SpecialThanks

 CocoaPods Spec  Pie Chart  Scatter Chart

转载于:https://www.cnblogs.com/YouXianMing/p/4712262.html

你可能感兴趣的文章
WAKE-WIN10-SOFT-VS2013及工具
查看>>
BZOJ2957: 楼房重建(分块)
查看>>
BZOJ2199: [Usaco2011 Jan]奶牛议会(2-SAT)
查看>>
Vijos / 题库 / 输油管道问题
查看>>
洛谷2017 5月月赛R1
查看>>
连接mysql数据库,创建用户模型
查看>>
c# 通过 OLEDB连接Access,DBF。
查看>>
SetTimeout直接执行没有延时
查看>>
Future设计模式
查看>>
Excel -- 实用技巧
查看>>
json字符串和dict互转
查看>>
Canvas文本绘制
查看>>
C++单例模式
查看>>
git diff命令详解
查看>>
wireshark 抓包过滤器使用
查看>>
生成最大单号 scope_identity
查看>>
PHP(一)OOP基础
查看>>
解耦与分离 —— 面向切面编程(AOP)
查看>>
Java 面向对象编程 tricks
查看>>
可视化 —— 二维平面上的散列点在坐标轴方向上的移动
查看>>