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