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