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/JHPieChart.m |  301 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 301 insertions(+), 0 deletions(-)

diff --git a/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHPieChart.m b/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHPieChart.m
new file mode 100755
index 0000000..eb089c3
--- /dev/null
+++ b/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHPieChart.m
@@ -0,0 +1,301 @@
+//
+//  JHPieChart.m
+//  JHCALayer
+//
+//  Created by cjatech-������ on 16/5/3.
+//  Copyright �� 2016��� JH. All rights reserved.
+//
+
+#import "JHPieChart.h"
+#import "JHPieItemsView.h"
+#import "JHPieForeBGView.h"
+#import "JHShowInfoView.h"
+#define k_COLOR_STOCK @[[UIColor colorWithRed:244/255.0 green:161/255.0 blue:100/255.0 alpha:1],[UIColor colorWithRed:87/255.0 green:255/255.0 blue:191/255.0 alpha:1],[UIColor colorWithRed:254/255.0 green:224/255.0 blue:90/255.0 alpha:1],[UIColor colorWithRed:240/255.0 green:58/255.0 blue:63/255.0 alpha:1],[UIColor colorWithRed:147/255.0 green:111/255.0 blue:255/255.0 alpha:1],[UIColor colorWithRed:255/255.0 green:255/255.0 blue:199/255.0 alpha:1],[UIColor colorWithRed:90/255.0 green:159/255.0 blue:229/255.0 alpha:1],[UIColor colorWithRed:100/255.0 green:230/255.0 blue:95/255.0 alpha:1],[UIColor colorWithRed:33/255.0 green:255/255.0 blue:255/255.0 alpha:1],[UIColor colorWithRed:249/255.0 green:110/255.0 blue:176/255.0 alpha:1],[UIColor colorWithRed:192/255.0 green:168/255.0 blue:250/255.0 alpha:1],[UIColor colorWithRed:166/255.0 green:134/255.0 blue:54/255.0 alpha:1],[UIColor colorWithRed:217/255.0 green:221/255.0 blue:228/255.0 alpha:1],[UIColor colorWithRed:99/255.0 green:106/255.0 blue:192/255.0 alpha:1]]
+
+@interface JHPieChart ()
+
+@property (nonatomic,strong) JHPieForeBGView * pieForeView;
+
+
+@property (assign , nonatomic) NSInteger  allValueCount ;
+
+
+@property (nonatomic,strong) NSMutableArray * angleArr;
+
+
+@property (nonatomic,strong) NSMutableArray * countPreAngeleArr;
+
+
+@property (nonatomic,strong) NSMutableArray * layersArr;
+
+@property (assign , nonatomic) NSInteger  saveIndex ;
+
+
+@property (assign , nonatomic) CGFloat  chartArcLength ;
+
+@property (nonatomic,strong) JHShowInfoView * showInfoView;
+@end
+
+
+@implementation JHPieChart
+
+
+-(instancetype)init{
+    
+    if (self = [super init]) {
+        _chartArcLength = 8.0;
+    }
+    
+    return self;
+    
+}
+
+
+-(instancetype)initWithFrame:(CGRect)frame{
+    
+    if (self = [super initWithFrame:frame]) {
+        
+        _chartArcLength = 8.0;
+    }
+    
+    return self;
+    
+}
+
+-(void)drawRect:(CGRect)rect{
+    
+    CGContextRef contex = UIGraphicsGetCurrentContext();
+    
+    if (_descArr.count==_valueArr.count&&_descArr.count>0) {
+        
+        NSArray *colors = nil;
+        
+        if (_colorArr.count==_valueArr.count) {
+            colors = _colorArr;
+        }else{
+            colors = k_COLOR_STOCK;
+        }
+        
+        for (NSInteger i = 0; i<_descArr.count; i++) {
+        
+             [self drawQuartWithColor:colors[i%colors.count] andBeginPoint:P_M(15+self.frame.size.width/2*(i%2), 20*(i/2  )+25+_chartArcLength*2) andContext:contex];
+            CGFloat present = [_valueArr[i] floatValue]/_allValueCount*100;
+            [self drawText:[NSString stringWithFormat:@"%@ ������:% 3ld ������:%.1f%c",_descArr[i],[_valueArr[i] integerValue],present,'%'] andContext:contex atPoint:P_M(30+self.frame.size.width/2*(i%2), 20*(i/2  )+25+_chartArcLength*2) WithColor:[UIColor blackColor] andTextFontSize:8];
+        }
+       
+        
+    }
+    
+    
+}
+- (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)countAllValue{
+    _allValueCount = 0;
+    for (NSString *obj in _valueArr) {
+        
+        _allValueCount += obj.integerValue;
+        
+    }
+}
+
+
+- (void)countAllAngleDataArr{
+    
+    _angleArr = [NSMutableArray array];
+    for (NSString *obj in _valueArr) {
+        
+        [_angleArr addObject:[NSNumber numberWithDouble:obj.floatValue*M_PI * 2/_allValueCount]];
+        
+    }
+    
+    _countPreAngeleArr = [NSMutableArray array];
+    
+    for (NSInteger i = 0; i<_angleArr.count; i++) {
+        
+        if (i==0) {
+             [_countPreAngeleArr addObject:[NSNumber numberWithFloat:0]];
+        }
+        CGFloat angle = 0.0;
+        for (NSInteger j = 0; j<=i; j++) {
+            
+            angle += [_angleArr[j] floatValue];
+            
+        }
+        
+        [_countPreAngeleArr addObject:[NSNumber numberWithFloat:angle]];
+
+        
+    }
+    
+    
+    
+}
+
+-(void)showAnimation{
+    
+ 
+    
+    if (_valueArr.count>0) {
+        
+        [self countAllValue];
+        
+        [self countAllAngleDataArr];
+        
+        _layersArr = [NSMutableArray array];
+        
+        CGFloat wid = self.frame.size.width-20;
+        
+        if (_descArr.count>0) {
+            
+            NSInteger i = _descArr.count/2 + _descArr.count%2;
+            
+            wid = self.frame.size.height - 10 - i*25;
+            
+        }
+        
+        _chartArcLength = wid/2;
+        
+        NSArray *colors = nil;
+        
+        if (_colorArr.count == _valueArr.count) {
+            
+            colors = _colorArr;
+            
+        }else{
+            
+            colors = k_COLOR_STOCK;
+            
+        }
+        
+        
+        for (NSInteger i = 0; i<_countPreAngeleArr.count-1; i++) {
+            
+            JHPieItemsView *itemsView = [[JHPieItemsView alloc] initWithFrame:CGRectMake(10, 10, wid/2, wid/2) andBeginAngle:[_countPreAngeleArr[i] floatValue] andEndAngle:[_countPreAngeleArr[i+1] floatValue] andFillColor:colors[i%colors.count]];
+            
+            itemsView.center = CGPointMake(self.frame.size.width/2, 10+wid/2);
+            
+            itemsView.tag = i;
+            
+            [_layersArr addObject:itemsView];
+            
+            [self addSubview:itemsView];
+            
+        }
+        
+        _pieForeView = [[JHPieForeBGView alloc] initWithFrame:CGRectMake(10, 10, wid,  wid)];
+        
+        _pieForeView.center = CGPointMake(self.frame.size.width/2, 10+wid/2);
+        
+        _pieForeView.backgroundColor = [UIColor clearColor];
+        if (_showInfoView==nil) {
+            _showInfoView = [[JHShowInfoView alloc] init];
+            _showInfoView.hidden = YES;
+            [_pieForeView addSubview:_showInfoView];
+        }
+        _pieForeView.select = ^(CGFloat angle,CGPoint p){
+           
+            [self judgeWhitchOneIsNowAngle:angle andShowPoint:p];
+            
+        };
+        
+        [self addSubview:_pieForeView];
+        
+    }
+    
+    [self setNeedsDisplay];
+    
+}
+
+
+- (void)judgeWhitchOneIsNowAngle:(CGFloat )angel andShowPoint:(CGPoint)p{
+    
+    for (NSInteger i = 0; i<_countPreAngeleArr.count-1; i++) {
+        
+        if ([_countPreAngeleArr[i+1] floatValue]>=angel) {
+            
+         
+            
+            CGFloat NOW_ANGLE = [_countPreAngeleArr[i] floatValue]+[_angleArr[i] floatValue]/2;
+            
+            CGFloat standarSpa = _positionChangeLengthWhenClick;
+            
+
+            
+            CGFloat spa = sin(NOW_ANGLE)*standarSpa;
+            
+            CGFloat xSpa = cos(NOW_ANGLE)*standarSpa;
+            
+            JHPieItemsView *itemsView = _layersArr[i];
+           
+            JHPieItemsView *saveItems = _layersArr[_saveIndex];
+            
+            CGFloat wid = self.frame.size.width-20;
+            
+            if (_descArr.count>0) {
+                
+                NSInteger i = _descArr.count/2 + _descArr.count%2;
+                
+                wid = self.frame.size.height - 10 - i*25;
+                
+            }
+            NSArray *colors = nil;
+            
+            if (_colorArr.count == _valueArr.count) {
+                
+                colors = _colorArr;
+                
+            }else{
+                
+                colors = k_COLOR_STOCK;
+                
+            }
+             CGFloat present = [_valueArr[i] floatValue]/_allValueCount*100;
+            [UIView animateWithDuration:0.3 animations:^{
+                if (_saveIndex==i) {
+                    
+                    if (saveItems.center.x==self.frame.size.width/2) {
+                        _showInfoView.hidden = NO;
+                        itemsView.center = CGPointMake(self.frame.size.width/2+xSpa, 10+wid/2+spa);
+                        [_showInfoView updateFrameTo:CGRectMake(p.x, p.y, _showInfoView.frame.size.width, _showInfoView.frame.size.height) andBGColor:colors[i%colors.count] andShowContentString:[NSString stringWithFormat:@"%@ ������:% 3ld ������:%.1f%c",_descArr[i],[_valueArr[i] integerValue],present,'%']];
+//                        _showInfoView.frame = C   GRectMake(p.x, p.y, _showInfoView.frame.size.width, _showInfoView.frame.size.height);
+                        
+                    }else{
+                        _showInfoView.hidden = YES;
+                        saveItems.center = CGPointMake(self.frame.size.width/2, 10+wid/2);
+                        
+                    }
+                    
+                }else{
+                    
+                    saveItems.center = CGPointMake(self.frame.size.width/2, 10+wid/2);
+                    _showInfoView.hidden = NO;
+                    [_showInfoView updateFrameTo:CGRectMake(p.x, p.y, _showInfoView.frame.size.width, _showInfoView.frame.size.height) andBGColor:colors[i%colors.count] andShowContentString:[NSString stringWithFormat:@"%@ ������:% 3ld ������:%.1f%c",_descArr[i],[_valueArr[i] integerValue],present,'%']];
+                    itemsView.center = CGPointMake(self.frame.size.width/2+xSpa, 10+wid/2+spa);
+                    
+                }
+            }];
+           
+            
+               _saveIndex = i;
+            
+            break;
+        }
+        
+    }
+    
+    
+}
+
+
+
+@end

--
Gitblit v1.8.0