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/JHRadarChart.m | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 270 insertions(+), 0 deletions(-) diff --git a/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHRadarChart.m b/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHRadarChart.m new file mode 100755 index 0000000..c594a1a --- /dev/null +++ b/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHRadarChart.m @@ -0,0 +1,270 @@ +// +// JHRadarChart.m +// JHChartDemo +// +// Created by ������ on 16/9/9. +// Copyright �� 2016��� JH. All rights reserved. +// + +#import "JHRadarChart.h" + +@interface JHRadarChart () + +@property (nonatomic,assign)CGFloat chartRadius; +@property (nonatomic,strong)NSMutableArray * drawPointArray; + +@property (nonatomic,strong)NSMutableArray * baseDrawPointArray; +@end + + +@implementation JHRadarChart + + +-(NSMutableArray *)drawPointArray{ + + if (!_drawPointArray) { + _drawPointArray = [NSMutableArray array]; + } + + return _drawPointArray; +} + + +-(NSMutableArray *)baseDrawPointArray{ + + if (!_baseDrawPointArray) { + _baseDrawPointArray = [NSMutableArray array]; + } + return _baseDrawPointArray; +} + +-(void)setLayerCount:(NSInteger)layerCount{ + + if (layerCount<=0) { + return; + } + + _layerCount = layerCount; + +} + +-(instancetype)initWithFrame:(CGRect)frame{ + + + if (self = [super initWithFrame:frame]) { + + self.layerCount = 3; + self.chartRadius = (self.frame.size.height - 50 * 2) / 2.0; + self.chartOrigin = CGPointMake(CGRectGetWidth(self.frame) / 2.0, CGRectGetHeight(self.frame) / 2.0); + self.layerFillColor = [UIColor colorWithWhite:0.5 alpha:0.3]; + self.layerBoardColor = [UIColor colorWithWhite:0.5 alpha:0.3]; + self.speraLineColor = [UIColor whiteColor]; + self.perfectNumber = 100.0; + self.descTextFont = [UIFont systemFontOfSize:14]; + self.descTextColor = [UIColor darkGrayColor]; + } + + + return self; + +} + + +/** + * ������������������ + */ +- (void)configDrawingData{ + + + if (self.valueDataArray.count==0) { + return; + } + + + CGFloat perAngle = M_PI * 2 / self.valueDescArray.count; + for (NSInteger i = 0; i<self.valueDataArray.count; i++) { + + NSArray *valueArray = [self.valueDataArray objectAtIndex:i]; + NSMutableArray *cacheArray = [NSMutableArray array]; + + for (NSInteger j = 0; j<valueArray.count; j++) { + CGFloat value = [[valueArray objectAtIndex:j] floatValue]; + + value = (value>self.perfectNumber?self.perfectNumber:value); + + CGPoint cachePoint = CGPointMake(self.chartOrigin.x + value / self.perfectNumber * self.chartRadius * sin(j * perAngle), self.chartOrigin.y - value / self.perfectNumber * self.chartRadius * cos(j * perAngle)); + [cacheArray addObject:[NSValue valueWithCGPoint:cachePoint]]; + + } + + [self.drawPointArray addObject:[cacheArray copy]]; + + } + +} + + +- (void)configBaseViewDataArray{ + + [self.baseDrawPointArray removeAllObjects]; + CGFloat perLength = self.chartRadius / self.layerCount; + + CGFloat perAngle = M_PI * 2 / self.valueDescArray.count; + + for (NSInteger i = 0; i<self.layerCount; i++) { + + NSMutableArray *cacheArray = [NSMutableArray array]; + CGFloat cacheLength = (i+1) * perLength; + for (NSInteger j = 0; j<self.valueDescArray.count; j++) { + + CGPoint cachePoint = CGPointMake(self.chartOrigin.x + cacheLength * sin(j * perAngle) , self.chartOrigin.y - cacheLength * cos(j * perAngle)); + +// NSLog(@"-----%-----i== %ld ======%@",j * perAngle,i,NSStringFromCGPoint(cachePoint)); + NSValue *cacheValue = [NSValue valueWithCGPoint:cachePoint]; + [cacheArray addObject:cacheValue]; + + + if (i==0) { + + CGFloat width = [self sizeOfStringWithMaxSize:CGSizeMake(100, 20) textFont:self.descTextFont.pointSize aimString:self.valueDescArray[j]].width; + UILabel *cacheLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, width, 20)]; + cacheLabel.font = self.descTextFont; + cacheLabel.center = CGPointMake(self.chartOrigin.x + (self.chartRadius + width / 2 + 5) * sin(j * perAngle) ,self.chartOrigin.y - (self.chartRadius + 20 / 2 + 5) * cos(j * perAngle)); + cacheLabel.text = self.valueDescArray[j]; + cacheLabel.textColor = self.descTextColor; + [self addSubview:cacheLabel]; + } + + + } + + [self.baseDrawPointArray addObject:[cacheArray copy]]; + [cacheArray removeAllObjects]; + + } + + + +} + + +/** + * ��������������������������� + */ +- (void)drawBaseView{ + for (NSInteger i = self.baseDrawPointArray.count-1; i>=0; i--) { + CAShapeLayer *shapeLayer = [CAShapeLayer layer]; + + UIBezierPath *path = [UIBezierPath bezierPath]; + NSArray * cacheArray = [self.baseDrawPointArray objectAtIndex:i]; + for (NSInteger j = 0; j<cacheArray.count; j++) { + + NSValue *cacheValue = [cacheArray objectAtIndex:j]; + CGPoint currentCachePoint = [cacheValue CGPointValue]; + + + NSLog(@"i== %ld ======%@",i,NSStringFromCGPoint(currentCachePoint)); + if (j==0) { + [path moveToPoint:currentCachePoint]; + }else if(j==cacheArray.count){ + [path addLineToPoint:currentCachePoint]; + [path moveToPoint:currentCachePoint]; + }else{ + [path addLineToPoint:currentCachePoint]; + } + } + + [path closePath]; + shapeLayer.path = path.CGPath; + shapeLayer.fillColor = self.layerFillColor.CGColor; + shapeLayer.strokeColor = self.layerBoardColor.CGColor; + [self.layer addSublayer:shapeLayer]; + } + + CAShapeLayer *shapeLayer = [CAShapeLayer layer]; + + UIBezierPath *path = [UIBezierPath bezierPath]; + [path closePath]; + [path moveToPoint:self.chartOrigin]; + NSMutableArray * cacheArray = [self.baseDrawPointArray lastObject]; + for (NSInteger j = 0; j<cacheArray.count; j++) { + NSValue *cacheValue = [cacheArray objectAtIndex:j]; + CGPoint currentCachePoint = [cacheValue CGPointValue]; + + [path addLineToPoint:currentCachePoint]; + [path moveToPoint:self.chartOrigin]; + } + shapeLayer.path = path.CGPath; + shapeLayer.strokeColor = self.speraLineColor.CGColor; + [self.layer addSublayer:shapeLayer]; + + + + +} + + +- (void)drawValueView{ + + + if (self.drawPointArray.count==0) { + return; + } + + + for (NSInteger i = 0 ; i<self.drawPointArray.count; i++) { + + NSArray *cacheArray = [self.drawPointArray objectAtIndex:i]; + UIBezierPath *path = [UIBezierPath bezierPath]; + for (NSInteger j = 0; j<cacheArray.count; j++) { + + + + if (j==0) { + [path moveToPoint:[[cacheArray objectAtIndex:j] CGPointValue]]; + }else{ + [path addLineToPoint:[[cacheArray objectAtIndex:j] CGPointValue]]; + } + + } + [path closePath]; + CAShapeLayer *shaper = [CAShapeLayer layer]; + shaper.path = path.CGPath; + shaper.borderWidth = 1.0; + UIColor *cacheColor = [UIColor clearColor]; + if (self.valueDrawFillColorArray.count>i) { + cacheColor = self.valueDrawFillColorArray[i]; + } + shaper.fillColor = cacheColor.CGColor; + + + if (self.valueBoardColorArray.count>i) { + cacheColor = self.valueBoardColorArray[i]; + }else{ + cacheColor = [UIColor clearColor]; + } + shaper.strokeColor = cacheColor.CGColor; + + + [self.layer addSublayer:shaper]; + + } + + + +} + +-(void)showAnimation{ + + [self configBaseViewDataArray]; + [self configDrawingData]; + [self drawBaseView]; + [self drawValueView]; + +} + + + + + +@end -- Gitblit v1.8.0