From 4b96de8bf41974ccd27d1cb8445868e1285aa5ac Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 28 Apr 2018 15:35:34 +0800 Subject: [PATCH 1/4] =?UTF-8?q?1=EF=BC=9AJHLineChart=20=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20hasPoint=20=20=20=E5=AE=9E=E7=8E=B0=EF=BC=9B2?= =?UTF-8?q?=EF=BC=9A=E4=BF=AE=E6=94=B9JHLineChart=20=E4=B8=ADshowXDescVert?= =?UTF-8?q?ical=20=3D=20YES=20=E6=97=B6=EF=BC=8C3=EF=BC=9AJHLineChart=20?= =?UTF-8?q?=E4=B8=AD=E6=B7=BBleavelLine=E4=B8=BA=E8=99=9A=E5=AE=9E?= =?UTF-8?q?=E7=BA=BF=E7=9A=84=E9=85=8D=E7=BD=AE=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 0 -> 33654 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 17 +++ .../xcschemes/xcschememanagement.plist | 14 ++ JHChartDemo/JHChart/JHLineChart.h | 5 +- JHChartDemo/JHChart/JHLineChart.m | 25 ++-- JHChartDemo/JHShowController.m | 129 +++++++++++++++++- 6 files changed, 177 insertions(+), 13 deletions(-) create mode 100644 JHChartDemo.xcodeproj/project.xcworkspace/xcuserdata/frank.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 JHChartDemo.xcodeproj/xcuserdata/frank.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 JHChartDemo.xcodeproj/xcuserdata/frank.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/JHChartDemo.xcodeproj/project.xcworkspace/xcuserdata/frank.xcuserdatad/UserInterfaceState.xcuserstate b/JHChartDemo.xcodeproj/project.xcworkspace/xcuserdata/frank.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..cd5fc93ee3239bd2e3a4c94f740a57d350b978fe GIT binary patch literal 33654 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 F?>~?f1WNz_ literal 0 HcmV?d00001 diff --git a/JHChartDemo.xcodeproj/xcuserdata/frank.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/JHChartDemo.xcodeproj/xcuserdata/frank.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..8f94031 --- /dev/null +++ b/JHChartDemo.xcodeproj/xcuserdata/frank.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/JHChartDemo.xcodeproj/xcuserdata/frank.xcuserdatad/xcschemes/xcschememanagement.plist b/JHChartDemo.xcodeproj/xcuserdata/frank.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..d40c537 --- /dev/null +++ b/JHChartDemo.xcodeproj/xcuserdata/frank.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + JHChartDemo.xcscheme + + orderHint + 0 + + + + diff --git a/JHChartDemo/JHChart/JHLineChart.h b/JHChartDemo/JHChart/JHLineChart.h index e2cc274..3d0daa3 100644 --- a/JHChartDemo/JHChart/JHLineChart.h +++ b/JHChartDemo/JHChart/JHLineChart.h @@ -172,7 +172,10 @@ typedef NS_ENUM(NSInteger,JHLineChartQuadrantType){ */ @property (nonatomic,assign) BOOL showYLine ; - +/** + * whether this chart level lines is dottedLine or not.Default is YES + */ +@property (nonatomic, assign) BOOL leavelLineIsDotted; /** * whether this chart shows the Y level lines or not.Default is NO */ diff --git a/JHChartDemo/JHChart/JHLineChart.m b/JHChartDemo/JHChart/JHLineChart.m index 5d9a610..bb80039 100644 --- a/JHChartDemo/JHChart/JHLineChart.m +++ b/JHChartDemo/JHChart/JHLineChart.m @@ -54,6 +54,7 @@ -(instancetype)initWithFrame:(CGRect)frame andLineChartType:(JHLineChartType)lin _layerArr = [NSMutableArray array]; _showYLine = YES; _showYLevelLine = NO; + _leavelLineIsDotted = YES; _showValueLeadingLine = YES; _valueFontSize = 8.0; _showPointDescription = YES; @@ -452,6 +453,7 @@ - (void)drawXAndYLineWithContext:(CGContextRef)context{ label.text = [NSString stringWithFormat:@"%@",_xLineDataArr[i]]; label.font = [UIFont systemFontOfSize:self.xDescTextFontSize]; label.numberOfLines = 0; + label.textColor = _xAndYNumberColor; label.transform = CGAffineTransformRotate(label.transform, _xDescriptionAngle); [self addSubview:label]; @@ -483,7 +485,7 @@ - (void)drawXAndYLineWithContext:(CGContextRef)context{ CGFloat len = [self sizeOfStringWithMaxSize:CGSizeMake(CGFLOAT_MAX, 30) textFont:self.yDescTextFontSize aimString:leftArray[i]].width; CGFloat hei = [self sizeOfStringWithMaxSize:CGSizeMake(CGFLOAT_MAX, 30) textFont:self.yDescTextFontSize aimString:leftArray[i]].height; if (_showYLevelLine) { - [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(self.contentInsets.left+_xLength, p.y) andIsDottedLine:YES andColor:self.xAndYLineColor]; + [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(self.contentInsets.left+_xLength, p.y) andIsDottedLine:self.leavelLineIsDotted andColor:self.xAndYLineColor]; }else{ [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(p.x+3, p.y) andIsDottedLine:NO andColor:self.xAndYLineColor]; @@ -510,7 +512,7 @@ - (void)drawXAndYLineWithContext:(CGContextRef)context{ CGFloat len = [self sizeOfStringWithMaxSize:CGSizeMake(CGFLOAT_MAX, 30) textFont:self.yDescTextFontSize aimString:_yLineDataArr[i]].width; CGFloat hei = [self sizeOfStringWithMaxSize:CGSizeMake(CGFLOAT_MAX, 30) textFont:self.yDescTextFontSize aimString:_yLineDataArr[i]].height; if (_showYLevelLine) { - [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(self.contentInsets.left+_xLength, p.y) andIsDottedLine:YES andColor:self.xAndYLineColor]; + [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(self.contentInsets.left+_xLength, p.y) andIsDottedLine:self.leavelLineIsDotted andColor:self.xAndYLineColor]; }else{ [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(p.x+3, p.y) andIsDottedLine:NO andColor:self.xAndYLineColor]; @@ -527,7 +529,7 @@ - (void)drawXAndYLineWithContext:(CGContextRef)context{ [self drawLineWithContext:context andStarPoint:P_M(self.contentInsets.left, self.chartOrigin.y) andEndPoint:P_M(self.contentInsets.left+_xLength, self.chartOrigin.y) andIsDottedLine:NO andColor:self.xAndYLineColor]; if (_showYLine) { - [self drawLineWithContext:context andStarPoint:self.chartOrigin andEndPoint:P_M(self.chartOrigin.x,self.chartOrigin.y-_yLength) andIsDottedLine:NO andColor:self.xAndYLineColor]; + [self drawLineWithContext:context andStarPoint:self.chartOrigin andEndPoint:P_M(self.chartOrigin.x,self.chartOrigin.y-_yLength) andIsDottedLine:self.leavelLineIsDotted andColor:self.xAndYLineColor]; } if (_xLineDataArr.count == 2) { @@ -580,7 +582,7 @@ - (void)drawXAndYLineWithContext:(CGContextRef)context{ CGFloat len = [self sizeOfStringWithMaxSize:CGSizeMake(CGFLOAT_MAX, 30) textFont:self.yDescTextFontSize aimString:_yLineDataArr[i]].width; CGFloat hei = [self sizeOfStringWithMaxSize:CGSizeMake(CGFLOAT_MAX, 30) textFont:self.yDescTextFontSize aimString:_yLineDataArr[i]].height; if (_showYLevelLine) { - [self drawLineWithContext:context andStarPoint:P_M(self.contentInsets.left, p.y) andEndPoint:P_M(self.contentInsets.left+_xLength, p.y) andIsDottedLine:YES andColor:self.xAndYLineColor]; + [self drawLineWithContext:context andStarPoint:P_M(self.contentInsets.left, p.y) andEndPoint:P_M(self.contentInsets.left+_xLength, p.y) andIsDottedLine:self.leavelLineIsDotted andColor:self.xAndYLineColor]; }else [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(p.x+3, p.y) andIsDottedLine:NO andColor:self.xAndYLineColor]; [self drawText:[NSString stringWithFormat:@"%@",_yLineDataArr[i]] andContext:context atPoint:P_M(p.x-len-3, p.y-hei / 2) WithColor:_xAndYNumberColor andFontSize:self.yDescTextFontSize]; @@ -592,7 +594,7 @@ - (void)drawXAndYLineWithContext:(CGContextRef)context{ [self drawLineWithContext:context andStarPoint:self.chartOrigin andEndPoint:P_M(self.contentInsets.left+_xLength, self.chartOrigin.y) andIsDottedLine:NO andColor:self.xAndYLineColor]; if (_showYLine) { - [self drawLineWithContext:context andStarPoint:P_M(self.contentInsets.left,CGRectGetHeight(self.frame)-self.contentInsets.bottom) andEndPoint:P_M(self.contentInsets.left,self.contentInsets.top) andIsDottedLine:NO andColor:self.xAndYLineColor]; + [self drawLineWithContext:context andStarPoint:P_M(self.contentInsets.left,CGRectGetHeight(self.frame)-self.contentInsets.bottom) andEndPoint:P_M(self.contentInsets.left,self.contentInsets.top) andIsDottedLine:self.leavelLineIsDotted andColor:self.xAndYLineColor]; } if (_xLineDataArr.count>0) { @@ -632,7 +634,7 @@ - (void)drawXAndYLineWithContext:(CGContextRef)context{ CGFloat len = [self sizeOfStringWithMaxSize:XORYLINEMAXSIZE textFont:self.yDescTextFontSize aimString:topArr[i]].width; CGFloat hei = [self sizeOfStringWithMaxSize:CGSizeMake(CGFLOAT_MAX, 30) textFont:self.yDescTextFontSize aimString:topArr[i]].height; if (_showYLevelLine) { - [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(self.contentInsets.left+_xLength, p.y) andIsDottedLine:YES andColor:self.xAndYLineColor]; + [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(self.contentInsets.left+_xLength, p.y) andIsDottedLine:self.leavelLineIsDotted andColor:self.xAndYLineColor]; }else [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(p.x+3, p.y) andIsDottedLine:NO andColor:self.xAndYLineColor]; [self drawText:[NSString stringWithFormat:@"%@",topArr[i]] andContext:context atPoint:P_M(p.x-len-3, p.y-hei / 2) WithColor:_xAndYNumberColor andFontSize:self.yDescTextFontSize]; @@ -646,7 +648,7 @@ - (void)drawXAndYLineWithContext:(CGContextRef)context{ CGFloat hei = [self sizeOfStringWithMaxSize:CGSizeMake(CGFLOAT_MAX, 30) textFont:self.yDescTextFontSize aimString:bottomArr[i]].height; if (_showYLevelLine) { - [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(self.contentInsets.left+_xLength, p.y) andIsDottedLine:YES andColor:self.xAndYLineColor]; + [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(self.contentInsets.left+_xLength, p.y) andIsDottedLine:self.leavelLineIsDotted andColor:self.xAndYLineColor]; }else{ [self drawLineWithContext:context andStarPoint:p andEndPoint:P_M(p.x+3, p.y) andIsDottedLine:NO andColor:self.xAndYLineColor]; @@ -1091,8 +1093,8 @@ - (void)drawPositionLineWithContext:(CGContextRef)context{ if (_showValueLeadingLine) { - [self drawLineWithContext:context andStarPoint:P_M(self.chartOrigin.x, p.y) andEndPoint:p andIsDottedLine:YES andColor:positionLineColor]; - [self drawLineWithContext:context andStarPoint:P_M(p.x, self.chartOrigin.y) andEndPoint:p andIsDottedLine:YES andColor:positionLineColor]; + [self drawLineWithContext:context andStarPoint:P_M(self.chartOrigin.x, p.y) andEndPoint:p andIsDottedLine:self.leavelLineIsDotted andColor:positionLineColor]; + [self drawLineWithContext:context andStarPoint:P_M(p.x, self.chartOrigin.y) andEndPoint:p andIsDottedLine:self.leavelLineIsDotted andColor:positionLineColor]; } if (!_showPointDescription) { @@ -1180,6 +1182,11 @@ -(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{ */ - (void)drawPoint{ + // 实现不显示点时的逻辑 + if (self.hasPoint == NO) { + return; + } + for (NSInteger m = 0;m<_drawDataArr.count;m++) { NSArray *arr = _drawDataArr[m]; diff --git a/JHChartDemo/JHShowController.m b/JHChartDemo/JHShowController.m index 41eae8e..f90b40f 100644 --- a/JHChartDemo/JHShowController.m +++ b/JHChartDemo/JHShowController.m @@ -12,6 +12,8 @@ #define k_MainBoundsHeight [UIScreen mainScreen].bounds.size.height @interface JHShowController () +@property (nonatomic, strong)JHLineChart * lineChart; + @end @implementation JHShowController @@ -23,7 +25,9 @@ - (void)viewDidLoad { switch (_index) { case 0: { - [self showFirstQuardrant]; + [self addBtn]; + [self showFirstWithIndex:0]; + } break; case 1: @@ -75,8 +79,127 @@ - (void)viewDidLoad { } - - +NSArray * xLineDatas() { + return @[ + @[@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16"], + @[@"四月",@"五月",@"六月",@"七月",@"八月",@"九月",@"十月",@"十一月"] + ]; +} +NSArray * valueDatas() { + + return @[ + @[@[@"10",@"22",@"1",@6,@4,@9,@6,@7]], + @[@[@"20",@"12",@"30",@6,@14,@9,@3,@30]] + ]; +} +- (void)addBtn { + + NSArray * titles = @[@"周",@"月"]; + CGFloat width = (CGRectGetWidth(self.view.frame) - 20)/2 ; + + for (NSInteger i = 0; i < titles.count; i++) { + + UIButton * btn = [UIButton buttonWithType:UIButtonTypeSystem]; + [btn setTitle:titles[i] forState:UIControlStateNormal]; + btn.frame = CGRectMake(10 + i * width, 500, width, 30); + btn.tag = i + 1; + [btn addTarget:self action:@selector(changeBtnClick:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:btn]; + } +} +- (void)changeBtnClick:(UIButton *)btn { + + + [self showFirstWithIndex:btn.tag - 1]; + +} +- (JHLineChart *)lineChart { + + if (!_lineChart) { + _lineChart = [[JHLineChart alloc] initWithFrame:CGRectMake(10, 60, k_MainBoundsWidth-20, 300) andLineChartType:JHChartLineValueNotForEveryX]; + [self.view addSubview:_lineChart]; + } + return _lineChart; +} +- (void)showFirstWithIndex:(NSInteger)index { + /* Create object */ +// JHLineChart *lineChart = [[JHLineChart alloc] initWithFrame:CGRectMake(10, 60, k_MainBoundsWidth-20, 300) andLineChartType:JHChartLineValueNotForEveryX]; + + /* The scale value of the X axis can be passed into the NSString or NSNumber type and the data structure changes with the change of the line chart type. The details look at the document or other quadrant X axis data source sample.*/ + + JHLineChart * lineChart = self.lineChart; + + [lineChart clear]; + + // x 轴坐标显示 yLineDataArr + lineChart.xLineDataArr = xLineDatas()[index]; + // 偏移量 + lineChart.contentInsets = UIEdgeInsetsMake(50, 25, 35, 25); + /* The different types of the broken line chart, according to the quadrant division, different quadrant correspond to different X axis scale data source and different value data source. */ + // 分布象限 + lineChart.lineChartQuadrantType = JHLineChartQuadrantTypeFirstQuardrant; + + // 需要绘制的数据(对应每个 x 点坐标的 y 值) + lineChart.valueArr = valueDatas()[index]; + // lineChart.valueBaseRightYLineArray = @[@[@"3",@"1",@"2",@1,@2,@3,@2,@5]]; + + // 绘制线条宽度 + lineChart.animationPathWidth = 1; + // 是否显示绘制点 + lineChart.hasPoint = YES; + // 显示 y轴水平线 + lineChart.showYLevelLine = YES; + // 是否显示 Y 轴,默认为 YES + lineChart.showYLine = YES; + + // 是否显示 双 Y 轴 + lineChart.showDoubleYLevelLine = NO; + + // Y 轴显示对应的坐标值 单 y 轴时,无需填写 + // lineChart.yLineDataArr = @[@[@5,@10,@15,@20,@25,@30],@[@1,@2,@3,@4,@5,@6]]; + + // lineChart.yLineDataArr = @[@5,@10,@15,@20,@25,@30]; + // lineChart.drawPathFromXIndex = 1; + + // 动画绘制时间 + lineChart.animationDuration = 2.0; + // 是否显示标尺线 + lineChart.showValueLeadingLine = NO; + // 标尺线是否为 虚线 + lineChart.leavelLineIsDotted = NO; + // 点值字号大小 + lineChart.valueFontSize = 9.0; + lineChart.backgroundColor = [UIColor colorWithRed:26 / 255.0 green:49 / 255.0 blue:100 / 255.0 alpha:1.0]; + + // 显示点值 描述 + lineChart.showPointDescription = YES; + + // 垂直显示 X轴 坐标(此时布局为 UILabel) + lineChart.showXDescVertical = NO; + // 垂直显示是的最大宽度 + lineChart.xDescMaxWidth = 15; + + /* 折线颜色 */ + lineChart.valueLineColorArr =@[ [UIColor colorWithWhite:0.8 alpha:0.5]]; + /* 描点颜色*/ + lineChart.pointColorArr = @[[UIColor redColor]]; + /* XY 轴线颜色 */ + lineChart.xAndYLineColor = [UIColor grayColor]; + /* XY 轴线坐标颜色 */ + lineChart.xAndYNumberColor = [UIColor whiteColor]; +// /* Dotted line color of the coordinate point */ +// lineChart.positionLineColorArr = @[[UIColor whiteColor]]; + /* 是否需要颜色填充 */ + lineChart.contentFill = YES; + /* 是否为曲线 */ + lineChart.pathCurve = YES; + /* 填充色 */ + lineChart.contentFillColorArr = @[[UIColor colorWithRed:55/255.0 green:90/255.0 blue:150/255.0 alpha:0.5]]; +// [self.view addSubview:lineChart]; + /* Start animation */ + [lineChart showAnimation]; + +} //第一象限折线图 - (void)showFirstQuardrant{ /* Create object */ From 0ee16976eee1b603b902ba70b3a0e757a4e8b902 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 28 Apr 2018 17:33:00 +0800 Subject: [PATCH 2/4] =?UTF-8?q?1=EF=BC=9AJHLineChart=20=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20hasPoint=20=20=20=E5=AE=9E=E7=8E=B0=EF=BC=9B2?= =?UTF-8?q?=EF=BC=9A=E4=BF=AE=E6=94=B9JHLineChart=20=E4=B8=ADshowXDescVert?= =?UTF-8?q?ical=20=3D=20YES=20=E6=97=B6=EF=BC=8C3=EF=BC=9AJHLineChart=20?= =?UTF-8?q?=E4=B8=AD=E6=B7=BBleavelLine=E4=B8=BA=E8=99=9A=E5=AE=9E?= =?UTF-8?q?=E7=BA=BF=E7=9A=84=E9=85=8D=E7=BD=AE=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 33654 -> 39644 bytes JHChartDemo/JHChart/JHRingChart.h | 29 ++++ JHChartDemo/JHChart/JHRingChart.m | 126 ++++++++++++++---- JHChartDemo/JHShowController.m | 24 +++- 4 files changed, 150 insertions(+), 29 deletions(-) diff --git a/JHChartDemo.xcodeproj/project.xcworkspace/xcuserdata/frank.xcuserdatad/UserInterfaceState.xcuserstate b/JHChartDemo.xcodeproj/project.xcworkspace/xcuserdata/frank.xcuserdatad/UserInterfaceState.xcuserstate index cd5fc93ee3239bd2e3a4c94f740a57d350b978fe..b60f8db4da78b1b91ab37a20e6649c32fba80958 100644 GIT binary patch literal 39644 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 diff --git a/JHChartDemo/JHChart/JHRingChart.h b/JHChartDemo/JHChart/JHRingChart.h index 714a668..6a10a3f 100644 --- a/JHChartDemo/JHChart/JHRingChart.h +++ b/JHChartDemo/JHChart/JHRingChart.h @@ -6,11 +6,40 @@ // Copyright © 2016年 JH. All rights reserved. // +#import #import "JHChart.h" +/** + 圆环展示样式 + + - RingChartType_Default: 默认,有模块指示线百分比 + - RingChartType_BottomTips: 指示线百分比在圆环下方显示 + */ +typedef NS_ENUM(NSUInteger, RingChartType) { + + RingChartType_Default = 0, + RingChartType_BottomTips, + +}; + + @interface JHRingChart : JHChart #define k_Width_Scale (self.frame.size.width / [UIScreen mainScreen].bounds.size.width) + +/** + * Description of each segment of a pie graph + */ +@property (nonatomic, strong) NSArray * descArr; + +/** + 圆环展示样式 + */ +@property (nonatomic, assign) RingChartType ringShowType; +/** + 圆环模块间隔, 默认为 10 + */ +@property (nonatomic, assign) CGFloat ringItemsSpace; /** * Data source Array */ diff --git a/JHChartDemo/JHChart/JHRingChart.m b/JHChartDemo/JHChart/JHRingChart.m index e4e0221..6032fc6 100644 --- a/JHChartDemo/JHChart/JHRingChart.m +++ b/JHChartDemo/JHChart/JHRingChart.m @@ -19,6 +19,14 @@ @interface JHRingChart () @property (nonatomic,assign) CGFloat redius; + +@property (assign , nonatomic) NSInteger allValueCount ; +// 下方小标签 宽度 +@property (assign , nonatomic) CGFloat chartArcLength ; + + + + @end @@ -32,6 +40,8 @@ -(instancetype)initWithFrame:(CGRect)frame { self.chartOrigin = CGPointMake(CGRectGetWidth(self.frame) / 2, CGRectGetHeight(self.frame)/2); _redius = (CGRectGetHeight(self.frame) -60*k_Width_Scale)/4; _ringWidth = 40; + _ringItemsSpace = 10; + _chartArcLength = 8.0; } return self; } @@ -46,11 +56,14 @@ -(void)setValueDataArr:(NSArray *)valueDataArr{ [self configBaseData]; } - +- (void)setRingItemsSpace:(CGFloat)ringItemsSpace { + _ringItemsSpace = ringItemsSpace; + [self configBaseData]; +} - (void)configBaseData{ _totolCount = 0; - _itemsSpace = (M_PI * 2.0 * 10 / 360)/_valueDataArr.count ; + _itemsSpace = (M_PI * 2.0 * _ringItemsSpace / 360)/_valueDataArr.count ; for (id obj in _valueDataArr) { _totolCount += [obj floatValue]; @@ -69,6 +82,9 @@ - (void)showAnimation{ [layer removeFromSuperlayer]; } + if (_ringShowType == RingChartType_BottomTips) { + self.chartOrigin = CGPointMake(self.chartOrigin.x, self.chartOrigin.y * 2 / 3 ); + } CGFloat lastBegin = -M_PI/2; @@ -109,11 +125,63 @@ - (void)showAnimation{ } - +- (void)countAllValue{ + _allValueCount = 0; + for (NSString *obj in _valueDataArr) { + + _allValueCount += obj.integerValue; + + } +} +- (void)drawText:(NSString *)text andContext:(CGContextRef )context atPoint:(CGPoint )rect WithColor:(UIColor *)color andTextFontSize:(CGFloat )fontSize{ + + + [[NSString stringWithFormat:@"%@",text] drawAtPoint:rect withAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"CourierNewPSMT" size:fontSize],NSForegroundColorAttributeName:color}]; + + + [color setFill]; + CGContextDrawPath(context, kCGPathFill); + +} -(void)drawRect:(CGRect)rect{ CGContextRef contex = UIGraphicsGetCurrentContext(); + + if (!_descArr) { + NSMutableArray * arr = [NSMutableArray arrayWithCapacity:_valueDataArr.count]; + [_valueDataArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + [arr addObject:@""]; + }]; + _descArr = arr; + } + + // 绘制底部标签 + if (_valueDataArr.count>0 && _ringShowType == RingChartType_BottomTips) { + + NSArray *colors = nil; + + if (_fillColorArray.count==_valueDataArr.count) { + colors = _fillColorArray; + }else{ + colors = k_COLOR_STOCK; + } + +// if (!self.showDescripotion) { +// return; +// } + + for (NSInteger i = 0; i<_descArr.count; i++) { + + [self drawQuartWithColor:colors[i%colors.count] andBeginPoint:P_M(15+self.frame.size.width/3*(i%3), 20*(i/3 )+ self.chartOrigin.y * 2 + 25+_chartArcLength*2) andContext:contex]; + + CGFloat present = [_valueDataArr[i] floatValue] / _totolCount * 100; + [self drawText:[NSString stringWithFormat:@"%@ 占比:%.1f%c",_descArr[i],present,'%'] andContext:contex atPoint:P_M(30+self.frame.size.width/3*(i%3), 20*(i/3)+ self.chartOrigin.y * 2 + 25+_chartArcLength*2) WithColor:[UIColor whiteColor] andTextFontSize:8*k_Width_Scale]; + } + + + } + CGFloat lastBegin = 0; CGFloat longLen = _redius +30*k_Width_Scale; @@ -122,44 +190,48 @@ -(void)drawRect:(CGRect)rect{ CGFloat currentSpace = [obj floatValue] / _totolCount * (M_PI * 2 - _itemsSpace * _valueDataArr.count);; NSLog(@"%f",currentSpace); CGFloat midSpace = lastBegin + currentSpace / 2; - + CGPoint begin = CGPointMake(self.chartOrigin.x + sin(midSpace) * _redius, self.chartOrigin.y - cos(midSpace)*_redius); CGPoint endx = CGPointMake(self.chartOrigin.x + sin(midSpace) * longLen, self.chartOrigin.y - cos(midSpace)*longLen); - + NSLog(@"%@%@",NSStringFromCGPoint(begin),NSStringFromCGPoint(endx)); lastBegin += _itemsSpace + currentSpace; - + UIColor *color; - + if (_fillColorArray.count<_valueDataArr.count) { color = k_COLOR_STOCK[i%k_COLOR_STOCK.count]; }else{ color = _fillColorArray[i]; } - - [self drawLineWithContext:contex andStarPoint:begin andEndPoint:endx andIsDottedLine:NO andColor:color]; - - - CGPoint secondP = CGPointZero; - - CGSize size = [[NSString stringWithFormat:@"%.02f%c",[obj floatValue] / _totolCount * 100,'%'] boundingRectWithSize:CGSizeMake(200, 100) options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10*k_Width_Scale]} context:nil].size; - - if (midSpace Date: Mon, 30 Apr 2018 14:20:59 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=8E=AF=E7=8A=B6?= =?UTF-8?q?=E5=9B=BE=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 39644 -> 38237 bytes JHChartDemo/JHChart/JHRingChart.h | 6 ++ JHChartDemo/JHChart/JHRingChart.m | 56 ++++++++++++++---- JHChartDemo/JHShowController.m | 3 +- 4 files changed, 52 insertions(+), 13 deletions(-) diff --git a/JHChartDemo.xcodeproj/project.xcworkspace/xcuserdata/frank.xcuserdatad/UserInterfaceState.xcuserstate b/JHChartDemo.xcodeproj/project.xcworkspace/xcuserdata/frank.xcuserdatad/UserInterfaceState.xcuserstate index b60f8db4da78b1b91ab37a20e6649c32fba80958..f0f6809ec44bf6db5933fb62ae8c47967feedb32 100644 GIT binary patch literal 38237 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 W?-+VQ>$T}SCB5HlybrA&O5Xx;kRP!C literal 39644 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 0) { + + CGSize txtSize = [self getTextWithWhenDrawWithText:self.ringScore fontSize:30*k_Width_Scale maxSize:CGSizeMake(_redius, _redius)]; + [self drawText:self.ringScore andContext:contex atPoint:P_M(self.chartOrigin.x - txtSize.width/2,self.chartOrigin.y - txtSize.height/2) WithColor:[UIColor whiteColor] andTextFontSize:30*k_Width_Scale]; + } + + if (!_descArr) { NSMutableArray * arr = [NSMutableArray arrayWithCapacity:_valueDataArr.count]; [_valueDataArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { @@ -167,16 +192,12 @@ -(void)drawRect:(CGRect)rect{ colors = k_COLOR_STOCK; } -// if (!self.showDescripotion) { -// return; -// } - for (NSInteger i = 0; i<_descArr.count; i++) { - [self drawQuartWithColor:colors[i%colors.count] andBeginPoint:P_M(15+self.frame.size.width/3*(i%3), 20*(i/3 )+ self.chartOrigin.y * 2 + 25+_chartArcLength*2) andContext:contex]; + [self drawQuartWithColor:colors[i%colors.count] andBeginPoint:P_M(20+15+self.frame.size.width/3*(i%3), 20*(i/3 )+ self.chartOrigin.y * 2 + 25+_chartArcLength*2) andContext:contex]; CGFloat present = [_valueDataArr[i] floatValue] / _totolCount * 100; - [self drawText:[NSString stringWithFormat:@"%@ 占比:%.1f%c",_descArr[i],present,'%'] andContext:contex atPoint:P_M(30+self.frame.size.width/3*(i%3), 20*(i/3)+ self.chartOrigin.y * 2 + 25+_chartArcLength*2) WithColor:[UIColor whiteColor] andTextFontSize:8*k_Width_Scale]; + [self drawText:[NSString stringWithFormat:@"%@ 占比:%.1f%c",_descArr[i],present,'%'] andContext:contex atPoint:P_M(30+self.frame.size.width/3*(i%3)+20, 20*(i/3)+ self.chartOrigin.y * 2 + 25+_chartArcLength*2) WithColor:[UIColor whiteColor] andTextFontSize:10*k_Width_Scale]; } @@ -223,16 +244,27 @@ -(void)drawRect:(CGRect)rect{ }else{ secondP =CGPointMake(endx.x - 20*k_Width_Scale, endx.y); - [self drawText:txt andContext:contex atPoint:CGPointMake(secondP.x - size.width - 3, secondP.y - size.height/2) WithColor:color andFontSize:8*k_Width_Scale]; + [self drawText:txt andContext:contex atPoint:CGPointMake(secondP.x - size.width - 3, secondP.y - size.height/2) WithColor:color andFontSize:10*k_Width_Scale]; } [self drawLineWithContext:contex andStarPoint:endx andEndPoint:secondP andIsDottedLine:NO andColor:color]; [self drawPointWithRedius:3*k_Width_Scale andColor:color andPoint:secondP andContext:contex]; - }else{ - } } } +/** + * 判断文本宽度 + * + * @param text 文本内容 + * + * @return 文本宽度 + */ +- (CGSize)getTextWithWhenDrawWithText:(NSString *)text fontSize:(CGFloat)fsize maxSize:(CGSize)maxSize{ + + CGSize size = [[NSString stringWithFormat:@"%@",text] boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fsize]} context:nil].size; + + return size; +} diff --git a/JHChartDemo/JHShowController.m b/JHChartDemo/JHShowController.m index 6b73662..bd81996 100644 --- a/JHChartDemo/JHShowController.m +++ b/JHChartDemo/JHShowController.m @@ -386,7 +386,8 @@ - (void)showRingChart{ ring.backgroundColor = [UIColor colorWithRed:26 / 255.0 green:49 / 255.0 blue:100 / 255.0 alpha:1.0]; /* Data source array, only the incoming value, the corresponding ratio will be automatically calculated */ ring.ringItemsSpace = 0; - ring.ringShowType = RingChartType_Default; + ring.ringShowType = RingChartType_BottomTips; + ring.ringScore = @"100分"; // 顺时针排序 ring.valueDataArr = @[@"27",@"20",@"53"]; From 7af22242e4fb4f4b335a528b260c86457c0429fb Mon Sep 17 00:00:00 2001 From: Frank <2413913298@qq.com> Date: Mon, 30 Apr 2018 21:28:59 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=8E=AF=E7=8A=B6?= =?UTF-8?q?=E5=9B=BE=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 38237 -> 41733 bytes JHChartDemo/JHChart/JHLineChart.h | 5 +++++ JHChartDemo/JHChart/JHLineChart.m | 5 ++++- JHChartDemo/JHShowController.m | 1 + 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/JHChartDemo.xcodeproj/project.xcworkspace/xcuserdata/frank.xcuserdatad/UserInterfaceState.xcuserstate b/JHChartDemo.xcodeproj/project.xcworkspace/xcuserdata/frank.xcuserdatad/UserInterfaceState.xcuserstate index f0f6809ec44bf6db5933fb62ae8c47967feedb32..aee3401c9f047f702090ce0f63adf298a8a80b50 100644 GIT binary patch literal 41733 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 0) { + + [self drawText:self.topDesc andContext:context atPoint:P_M(self.contentInsets.left,self.contentInsets.top/2) WithColor:[UIColor whiteColor] andFontSize:self.valueFontSize + 5.f]; + } for (NSInteger m = 0;m<_valueArr.count;m++) { NSArray *arr = _drawDataArr[m]; diff --git a/JHChartDemo/JHShowController.m b/JHChartDemo/JHShowController.m index bd81996..fbe2774 100644 --- a/JHChartDemo/JHShowController.m +++ b/JHChartDemo/JHShowController.m @@ -135,6 +135,7 @@ - (void)showFirstWithIndex:(NSInteger)index { lineChart.xLineDataArr = xLineDatas()[index]; // 偏移量 lineChart.contentInsets = UIEdgeInsetsMake(50, 25, 35, 25); + lineChart.topDesc = @"平均心率 65次,心脏骤停0次"; /* The different types of the broken line chart, according to the quadrant division, different quadrant correspond to different X axis scale data source and different value data source. */ // 分布象限 lineChart.lineChartQuadrantType = JHLineChartQuadrantTypeFirstQuardrant;