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/JHColumnChart.m | 396 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 396 insertions(+), 0 deletions(-)
diff --git a/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHColumnChart.m b/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHColumnChart.m
new file mode 100755
index 0000000..a8f753b
--- /dev/null
+++ b/screendisplay/screendisplay/Classes/ThirdClass/JHChart/JHColumnChart.m
@@ -0,0 +1,396 @@
+//
+// JHColumnChart.m
+// JHChartDemo
+//
+// Created by cjatech-������ on 16/5/10.
+// Copyright �� 2016��� JH. All rights reserved.
+//
+
+#import "JHColumnChart.h"
+
+@interface JHColumnChart ()
+
+//���������
+@property (nonatomic,strong)UIScrollView *BGScrollView;
+
+//������
+@property (nonatomic,assign) CGFloat maxHeight;
+
+//���������������
+@property (nonatomic,assign) CGFloat maxWidth;
+
+//Y���������������������
+@property (nonatomic,strong)NSMutableArray * yLineDataArr;
+
+//���������������������
+@property (nonatomic,strong)NSMutableArray * layerArr;
+
+//������������������������
+@property (nonatomic,strong)NSMutableArray * showViewArr;
+
+@property (nonatomic,assign) CGFloat perHeight;
+@end
+
+@implementation JHColumnChart
+
+
+-(NSMutableArray *)showViewArr{
+
+
+ if (!_showViewArr) {
+ _showViewArr = [NSMutableArray array];
+ }
+
+ return _showViewArr;
+
+}
+
+-(NSMutableArray *)layerArr{
+
+
+ if (!_layerArr) {
+ _layerArr = [NSMutableArray array];
+ }
+
+ return _layerArr;
+}
+
+
+-(UIScrollView *)BGScrollView{
+
+
+ if (!_BGScrollView) {
+
+ _BGScrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
+ _BGScrollView.showsHorizontalScrollIndicator = NO;
+ _bgVewBackgoundColor = _bgVewBackgoundColor;
+ [self addSubview:_BGScrollView];
+
+ }
+
+ return _BGScrollView;
+
+
+}
+
+
+-(void)setBgVewBackgoundColor:(UIColor *)bgVewBackgoundColor{
+
+ _bgVewBackgoundColor = bgVewBackgoundColor;
+ self.BGScrollView.backgroundColor = _bgVewBackgoundColor;
+
+}
+
+
+-(NSMutableArray *)yLineDataArr{
+
+
+ if (!_yLineDataArr) {
+ _yLineDataArr = [NSMutableArray array];
+ }
+ return _yLineDataArr;
+
+}
+
+
+-(instancetype)initWithFrame:(CGRect)frame{
+
+
+ if (self = [super initWithFrame:frame]) {
+
+ _needXandYLine = YES;
+
+
+ }
+ return self;
+
+}
+
+
+-(void)setValueArr:(NSArray<NSArray *> *)valueArr{
+
+
+ _valueArr = valueArr;
+ CGFloat max = 0;
+
+ for (NSArray *arr in _valueArr) {
+
+ for (id number in arr) {
+
+ CGFloat currentNumber = [NSString stringWithFormat:@"%@",number].floatValue;
+ if (currentNumber>max) {
+ max = currentNumber;
+ }
+
+ }
+
+ }
+
+ if (max<5.0) {
+ _maxHeight = 5.0;
+ }else if(max<10){
+ _maxHeight = 10;
+ }else{
+ _maxHeight = max;
+ }
+
+ _maxHeight += 4;
+ _perHeight = (CGRectGetHeight(self.frame) - 20 - _originSize.y)/_maxHeight;
+
+
+}
+
+
+-(void)showAnimation{
+
+
+
+ [self clear];
+
+ _columnWidth = (_columnWidth<=0?30:_columnWidth);
+ NSInteger count = _valueArr.count * [_valueArr[0] count];
+ _typeSpace = (_typeSpace<=0?15:_typeSpace);
+ _maxWidth = count * _columnWidth + _valueArr.count * _typeSpace + _typeSpace + 40;
+ self.BGScrollView.contentSize = CGSizeMake(_maxWidth, 0);
+ self.BGScrollView.backgroundColor = _bgVewBackgoundColor;
+
+
+ /* ������X���Y��� ������������������X���Y��������������� */
+ if (_needXandYLine) {
+
+ CAShapeLayer *layer = [CAShapeLayer layer];
+
+ [self.layerArr addObject:layer];
+
+ UIBezierPath *bezier = [UIBezierPath bezierPath];
+
+ [bezier moveToPoint:CGPointMake(self.originSize.x, CGRectGetHeight(self.frame) - self.originSize.y)];
+
+ [bezier addLineToPoint:P_M(self.originSize.x, 20)];
+
+
+ [bezier moveToPoint:CGPointMake(self.originSize.x, CGRectGetHeight(self.frame) - self.originSize.y)];
+
+ [bezier addLineToPoint:P_M(_maxWidth , CGRectGetHeight(self.frame) - self.originSize.y)];
+
+
+ layer.path = bezier.CGPath;
+
+ layer.strokeColor = (_colorForXYLine==nil?([UIColor blackColor].CGColor):_colorForXYLine.CGColor);
+
+
+ CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
+
+
+ basic.duration = 1.5;
+
+ basic.fromValue = @(0);
+
+ basic.toValue = @(1);
+
+ basic.autoreverses = NO;
+
+ basic.fillMode = kCAFillModeForwards;
+
+
+ [layer addAnimation:basic forKey:nil];
+
+ [self.BGScrollView.layer addSublayer:layer];
+
+// _maxHeight += 4;
+
+ /* ��������������������� */
+ UIBezierPath *second = [UIBezierPath bezierPath];
+ for (NSInteger i = 0; i<5; i++) {
+ NSInteger pace = (_maxHeight) / 5;
+ CGFloat height = _perHeight * (i+1)*pace;
+ [second moveToPoint:P_M(_originSize.x, CGRectGetHeight(self.frame) - _originSize.y -height)];
+ [second addLineToPoint:P_M(_maxWidth, CGRectGetHeight(self.frame) - _originSize.y - height)];
+
+
+
+ CATextLayer *textLayer = [CATextLayer layer];
+
+ textLayer.contentsScale = [UIScreen mainScreen].scale;
+ NSString *text =[NSString stringWithFormat:@"%ld",(i + 1) * pace];
+ CGFloat be = [self getTextWithWhenDrawWithText:text];
+ textLayer.frame = CGRectMake(self.originSize.x - be - 3, CGRectGetHeight(self.frame) - _originSize.y -height - 5, be, 15);
+
+ UIFont *font = [UIFont systemFontOfSize:7];
+ CFStringRef fontName = (__bridge CFStringRef)font.fontName;
+ CGFontRef fontRef = CGFontCreateWithFontName(fontName);
+ textLayer.font = fontRef;
+ textLayer.fontSize = font.pointSize;
+ CGFontRelease(fontRef);
+
+ textLayer.string = text;
+ textLayer.foregroundColor = (_drawTextColorForX_Y==nil?[UIColor blackColor].CGColor:_drawTextColorForX_Y.CGColor);
+ [_BGScrollView.layer addSublayer:textLayer];
+ [self.layerArr addObject:textLayer];
+
+ }
+
+ CAShapeLayer *shapeLayer = [CAShapeLayer layer];
+
+ shapeLayer.path = second.CGPath;
+
+ shapeLayer.strokeColor = (_dashColor==nil?([UIColor greenColor].CGColor):_dashColor.CGColor);
+
+ shapeLayer.lineWidth = 0.5;
+
+ [shapeLayer setLineDashPattern:@[@(3),@(3)]];
+
+ CABasicAnimation *basic2 = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
+
+
+ basic2.duration = 1.5;
+
+ basic2.fromValue = @(0);
+
+ basic2.toValue = @(1);
+
+ basic2.autoreverses = NO;
+
+
+
+ basic2.fillMode = kCAFillModeForwards;
+
+ [shapeLayer addAnimation:basic2 forKey:nil];
+
+ [self.BGScrollView.layer addSublayer:shapeLayer];
+ [self.layerArr addObject:shapeLayer];
+
+ }
+
+
+
+
+ /* ������X������������ ���������������������������������X���Y��� ������������������ */
+ if (_xShowInfoText.count == _valueArr.count&&_xShowInfoText.count>0) {
+
+ NSInteger count = [_valueArr[0] count];
+
+ for (NSInteger i = 0; i<_xShowInfoText.count; i++) {
+
+
+
+ CATextLayer *textLayer = [CATextLayer layer];
+
+ CGFloat wid = count * _columnWidth;
+
+
+
+ CGSize size = [_xShowInfoText[i] boundingRectWithSize:CGSizeMake(wid, MAXFLOAT) options:NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:9]} context:nil].size;
+
+ textLayer.frame = CGRectMake( i * (count * _columnWidth + _typeSpace) + _typeSpace + _originSize.x, CGRectGetHeight(self.frame) - _originSize.y+5,wid, size.height);
+ textLayer.string = _xShowInfoText[i];
+ textLayer.contentsScale = [UIScreen mainScreen].scale;
+ UIFont *font = [UIFont systemFontOfSize:9];
+
+
+
+ textLayer.fontSize = font.pointSize;
+
+ textLayer.foregroundColor = _drawTextColorForX_Y.CGColor;
+
+ textLayer.alignmentMode = kCAAlignmentCenter;
+
+ [_BGScrollView.layer addSublayer:textLayer];
+
+ [self.layerArr addObject:textLayer];
+
+
+ }
+
+
+ }
+
+
+
+
+
+
+ /* ������������ */
+ for (NSInteger i = 0; i<_valueArr.count; i++) {
+
+
+ NSArray *arr = _valueArr[i];
+
+ for (NSInteger j = 0; j<arr.count; j++) {
+
+
+ CGFloat height =[arr[j] floatValue] *_perHeight;
+
+
+ UIView *itemsView = [UIView new];
+ [self.showViewArr addObject:itemsView];
+ itemsView.frame = CGRectMake((i * arr.count + j)*_columnWidth + i*_typeSpace+_originSize.x + _typeSpace, CGRectGetHeight(self.frame) - _originSize.y-1, _columnWidth, 0);
+ itemsView.backgroundColor = (UIColor *)(_columnBGcolorsArr.count<arr.count?[UIColor greenColor]:_columnBGcolorsArr[j]);
+ [UIView animateWithDuration:1 animations:^{
+
+ itemsView.frame = CGRectMake((i * arr.count + j)*_columnWidth + i*_typeSpace+_originSize.x + _typeSpace, CGRectGetHeight(self.frame) - height - _originSize.y -1, _columnWidth, height);
+
+ } completion:^(BOOL finished) {
+ /* ��������������������������������� */
+ if (finished) {
+
+ CATextLayer *textLayer = [CATextLayer layer];
+
+ [self.layerArr addObject:textLayer];
+ NSString *str = [NSString stringWithFormat:@"%@",arr[j]];
+
+ CGSize size = [str boundingRectWithSize:CGSizeMake(_columnWidth, MAXFLOAT) options:NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:9]} context:nil].size;
+
+ textLayer.frame = CGRectMake((i * arr.count + j)*_columnWidth + i*_typeSpace+_originSize.x + _typeSpace, CGRectGetHeight(self.frame) - height - _originSize.y -3 - size.width, _columnWidth, size.height);
+
+ textLayer.string = str;
+
+ textLayer.fontSize = 9.0;
+
+ textLayer.alignmentMode = kCAAlignmentCenter;
+ textLayer.contentsScale = [UIScreen mainScreen].scale;
+ textLayer.foregroundColor = itemsView.backgroundColor.CGColor;
+
+ [_BGScrollView.layer addSublayer:textLayer];
+
+ }
+
+ }];
+
+ [self.BGScrollView addSubview:itemsView];
+
+
+ }
+
+ }
+
+
+
+
+
+}
+
+
+-(void)clear{
+
+
+ for (CALayer *lay in self.layerArr) {
+ [lay removeAllAnimations];
+ [lay removeFromSuperlayer];
+ }
+
+ for (UIView *subV in self.showViewArr) {
+ [subV removeFromSuperview];
+ }
+
+}
+
+
+
+
+
+
+
+
+
+@end
--
Gitblit v1.8.0