From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传

---
 screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHRingChart.m |  168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 168 insertions(+), 0 deletions(-)

diff --git a/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHRingChart.m b/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHRingChart.m
new file mode 100755
index 0000000..18af31f
--- /dev/null
+++ b/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHRingChart.m
@@ -0,0 +1,168 @@
+//
+//  JHRingChart.m
+//  JHChartDemo
+//
+//  Created by ������ on 16/7/5.
+//  Copyright �� 2016��� JH. All rights reserved.
+//
+
+#import "JHRingChart.h"
+#define k_COLOR_STOCK @[[UIColor colorWithRed:1.000 green:0.783 blue:0.371 alpha:1.000], [UIColor colorWithRed:1.000 green:0.562 blue:0.968 alpha:1.000],[UIColor colorWithRed:0.313 green:1.000 blue:0.983 alpha:1.000],[UIColor colorWithRed:0.560 green:1.000 blue:0.276 alpha:1.000],[UIColor colorWithRed:0.239 green:0.651 blue:0.170 alpha:1.000]]
+
+@interface JHRingChart ()
+
+//������������ �����������
+@property (nonatomic,assign)CGFloat itemsSpace;
+
+//���������
+@property (nonatomic,assign) CGFloat totolCount;
+
+@property (nonatomic,assign) CGFloat redius;
+
+@end
+
+
+@implementation JHRingChart
+
+
+
+-(instancetype)initWithFrame:(CGRect)frame {
+    
+    if (self = [super initWithFrame:frame]) {
+        self.chartOrigin = CGPointMake(CGRectGetWidth(self.frame) / 2, CGRectGetHeight(self.frame)/2);
+        _redius = (CGRectGetHeight(self.frame) -60*k_Width_Scale)/4;
+        _ringWidth = 40;
+    }
+    return self;
+}
+
+
+
+-(void)setValueDataArr:(NSArray *)valueDataArr{
+    
+    
+    _valueDataArr = valueDataArr;
+    
+    [self configBaseData];
+    
+}
+
+- (void)configBaseData{
+    
+    _totolCount = 0;
+    _itemsSpace =  (M_PI * 2.0 * 10 / 360)/_valueDataArr.count ;
+    for (id obj in _valueDataArr) {
+        
+        _totolCount += [obj floatValue];
+        
+    }
+
+}
+
+
+
+//������������
+- (void)showAnimation{
+    
+    /*        ���������������������������������������layer         */
+    for (CALayer *layer in self.layer.sublayers) {
+        [layer removeFromSuperlayer];
+    }
+    
+    
+    CGFloat lastBegin = -M_PI/2;
+    
+    CGFloat totloL = 0;
+    NSInteger  i = 0;
+    for (id obj in _valueDataArr) {
+        
+        CAShapeLayer *layer = [CAShapeLayer layer] ;
+
+        UIBezierPath *path = [UIBezierPath bezierPath];
+        
+        layer.fillColor = [UIColor clearColor].CGColor;
+        
+        if (i<_fillColorArray.count) {
+            layer.strokeColor =[_fillColorArray[i] CGColor];
+        }else{
+             layer.strokeColor =[k_COLOR_STOCK[i%k_COLOR_STOCK.count] CGColor];
+        }
+        CGFloat cuttentpace = [obj floatValue] / _totolCount * (M_PI * 2 - _itemsSpace * _valueDataArr.count);
+        totloL += [obj floatValue] / _totolCount;
+
+        [path addArcWithCenter:self.chartOrigin radius:_redius startAngle:lastBegin  endAngle:lastBegin  + cuttentpace clockwise:YES];
+        
+        layer.path = path.CGPath;
+        [self.layer addSublayer:layer];
+        layer.lineWidth = _ringWidth;
+        CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
+        basic.fromValue = @(0);
+        basic.toValue = @(1);
+        basic.duration = 0.5;
+        basic.fillMode = kCAFillModeForwards;
+        
+        [layer addAnimation:basic forKey:@"basic"];
+        lastBegin += (cuttentpace+_itemsSpace);
+        i++;
+
+    }
+
+}
+
+
+-(void)drawRect:(CGRect)rect{
+    
+    
+    CGContextRef contex = UIGraphicsGetCurrentContext();
+    
+    CGFloat lastBegin = 0;
+    CGFloat longLen = _redius +30*k_Width_Scale;
+    for (NSInteger i = 0; i<_valueDataArr.count; i++) {
+        id obj = _valueDataArr[i];
+        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<M_PI) {
+            secondP =CGPointMake(endx.x + 20*k_Width_Scale, endx.y);
+          [self drawText:[NSString stringWithFormat:@"%.02f%c",[obj floatValue] / _totolCount * 100,'%'] andContext:contex atPoint:CGPointMake(secondP.x + 3, secondP.y - size.height / 2) WithColor:k_COLOR_STOCK[i] andFontSize:10*k_Width_Scale];
+
+        }else{
+             secondP =CGPointMake(endx.x - 20*k_Width_Scale, endx.y);
+            [self drawText:[NSString stringWithFormat:@"%.02f%c",[obj floatValue] / _totolCount * 100,'%'] 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];
+       
+    }
+    
+    
+    
+    
+}
+
+
+
+
+@end

--
Gitblit v1.8.0