iOS画折线图

来源:互联网 发布:数据的独立性是指 编辑:程序博客网 时间:2024/05/22 03:01

代码例子效果:  下载地址:http://download.csdn.net/detail/qqmcy/6983187




LineChartViewDemo.h

#import <UIKit/UIKit.h>@interface LineChartViewDemo : UIView//横竖轴距离间隔@property (assign) NSInteger hInterval;@property (assign) NSInteger vInterval;//横竖轴显示标签@property (nonatomic, strong) NSArray *hDesc;@property (nonatomic, strong) NSArray *vDesc;//点信息@property (nonatomic, strong) NSArray *array;@property (nonatomic, strong) NSArray* array1;@end

LineChartViewDemo.m

#import "LineChartViewDemo.h"#import "EColumnChartLabel.h"#define KlineHeight 30@interface LineChartViewDemo(){    CALayer *linesLayer;            UIView *popView;    UILabel *disLabel;        int x;    int y;    }@end@implementation LineChartViewDemo- (id)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        // Initialization code        self.backgroundColor = [UIColor clearColor];        x = frame.size.width;        y = frame.size.height;                        _hInterval = 10;        _vInterval = 50;                linesLayer = [[CALayer alloc] init];        linesLayer.masksToBounds = YES;        linesLayer.contentsGravity = kCAGravityLeft;        linesLayer.backgroundColor = [[UIColor redColor] CGColor];                //[self.layer addSublayer:linesLayer];                        //PopView        popView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 60, 30)];        [popView setBackgroundColor:[UIColor whiteColor]];        [popView setAlpha:0.0f];                disLabel = [[UILabel alloc]initWithFrame:popView.frame];        [disLabel setTextAlignment:NSTextAlignmentCenter];                [popView addSubview:disLabel];        [self addSubview:popView];    }    return self;}// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect{    [self setClearsContextBeforeDrawing: YES];        CGContextRef context = UIGraphicsGetCurrentContext();        //画背景线条------------------    CGColorRef backColorRef = [UIColor redColor].CGColor;    CGFloat backLineWidth = 0.5f;    CGFloat backMiterLimit = 0.f;        CGContextSetLineWidth(context, backLineWidth);//主线宽度   // CGContextSetMiterLimit(context, backMiterLimit);//投影角度        //CGContextSetShadowWithColor(context, CGSizeMake(3, 5), 8, backColorRef);//设置双条线        CGContextSetLineJoin(context, kCGLineJoinRound);        CGContextSetLineCap(context, kCGLineCapRound );        CGContextSetBlendMode(context, kCGBlendModeNormal);        CGContextSetStrokeColorWithColor(context, [UIColor grayColor].CGColor);       // CGContextSetStrokeColorWithColor(context, [UIColor colorWithRed:225.0f / 255.0f green:225.0f / 255.0f blue:225.0f / 255.0f alpha:1.0].CGColor);    //    int x = 400 ;//    //Y轴横线//    int y = 300 ;    int tempY = y;            //添加纵轴标签和线    for (int i=0; i<_vDesc.count; i++) {                CGPoint bPoint = CGPointMake(30, tempY);        CGPoint ePoint = CGPointMake(x, tempY);                EColumnChartLabel *label = [[EColumnChartLabel alloc]initWithFrame:CGRectMake(0, 0, 30, 30)];        [label setCenter:CGPointMake(bPoint.x-15, bPoint.y-30)];        [label setTextAlignment:NSTextAlignmentCenter];        [label setBackgroundColor:[UIColor clearColor]];        [label setTextColor:[UIColor blackColor]];        [label setText:[_vDesc objectAtIndex:i]];        [self addSubview:label];                CGContextMoveToPoint(context, bPoint.x, bPoint.y-30);        CGContextAddLineToPoint(context, ePoint.x, ePoint.y-30);                tempY -= y * 0.1;            }        for (int i=0; i<_array.count-1; i++) {                EColumnChartLabel *label = [[EColumnChartLabel alloc]initWithFrame:CGRectMake(i*KlineHeight+30, y - 30, 40, 30)];        [label setTextAlignment:NSTextAlignmentCenter];        [label setBackgroundColor:[UIColor clearColor]];        [label setTextColor:[UIColor redColor]];        label.numberOfLines = 1;        label.adjustsFontSizeToFitWidth = YES;        label . minimumFontSize = 1.0f;        [label setText:[_hDesc objectAtIndex:i]];                [self addSubview:label];    }    CGContextStrokePath(context);            //    //画点线条------------------    CGColorRef pointColorRef = [UIColor colorWithRed:24.0f/255.0f green:116.0f/255.0f blue:205.0f/255.0f alpha:1.0].CGColor;    CGFloat pointLineWidth = 1.5f;    CGFloat pointMiterLimit = 5.0f;        CGContextSetLineWidth(context, pointLineWidth);//主线宽度    CGContextSetMiterLimit(context, pointMiterLimit);//投影角度            //CGContextSetShadowWithColor(context, CGSizeMake(3, 5), 8, pointColorRef);//设置双条线        CGContextSetLineJoin(context, kCGLineJoinRound);        CGContextSetLineCap(context, kCGLineCapRound );        CGContextSetBlendMode(context, kCGBlendModeNormal);        //CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);    UIColor* color1 = c_BeforeLastYear;    [color1 set];//绘图CGPoint p1 = [[_array objectAtIndex:0] CGPointValue];int i = 0;        //获取视图的高    int tempY1 = y;    int tempWidth = y * 0.1f;    float tempHeight = y * (270.0 / 320.0);    float tempHeight1 = y * (20.0f / 320.0f); //   NSLog(@"%f");CGContextMoveToPoint(context, p1.x + 20, tempHeight-p1.y*tempWidth/tempHeight1);for (; i<[_array count]; i++){p1 = [[_array objectAtIndex:i] CGPointValue];        CGPoint goPoint = CGPointMake(p1.x + 20, tempHeight-p1.y*tempWidth/tempHeight1);CGContextAddLineToPoint(context, goPoint.x, goPoint.y);;                //添加触摸点        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];                [bt setBackgroundColor:[UIColor redColor]];                [bt setFrame:CGRectMake(0, 0, 10, 10)];                [bt setCenter:goPoint];                [bt addTarget:self               action:@selector(btAction:)     forControlEvents:UIControlEventTouchUpInside];                [self addSubview:bt];}    CGContextStrokePath(context);       // CGContextSetStrokeColorWithColor(context, [UIColor greenColor].CGColor);    UIColor* color = c_LastYear;    [color set];    //绘图 p1 = [[_array1 objectAtIndex:0] CGPointValue]; i = 0;CGContextMoveToPoint(context, p1.x + 20, tempHeight-p1.y*tempWidth/tempHeight1);for (; i<[_array1 count]; i++){p1 = [[_array1 objectAtIndex:i] CGPointValue];        CGPoint goPoint = CGPointMake(p1.x + 20, tempHeight-p1.y*tempWidth/tempHeight1);CGContextAddLineToPoint(context, goPoint.x, goPoint.y);;                //添加触摸点        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];                [bt setBackgroundColor:[UIColor redColor]];                [bt setFrame:CGRectMake(0, 0, 10, 10)];                [bt setCenter:goPoint];                [bt addTarget:self               action:@selector(btAction:)     forControlEvents:UIControlEventTouchUpInside];                [self addSubview:bt];}CGContextStrokePath(context);                            }- (void)btAction:(id)sender{    [disLabel setText:@"400"];        UIButton *bt = (UIButton*)sender;    popView.center = CGPointMake(bt.center.x, bt.center.y - popView.frame.size.height/2);    [popView setAlpha:1.0f];}

ViewController.m

#import "LineChartViewDemo.h"#define CC_DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) * 0.01745329252f) #define KlineHeight 20#define KlineWidth 30@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad{        [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.    LineChartViewDemo* line = [[LineChartViewDemo alloc] initWithFrame:CGRectMake(0, 0, 548, 250)];   // line.layer.transform =  CATransform3DMakeRotation(CC_DEGREES_TO_RADIANS(90), 0, 0, 1);    NSMutableArray *pointArr = [[NSMutableArray alloc]init];        //生成随机点   1    //[pointArr addObject:[NSValue valueWithCGPoint:CGPointMake(KlineWidth*0, 0)]];    for (int i = 0; i < 12; i++) {        [pointArr addObject:[NSValue valueWithCGPoint:CGPointMake(KlineWidth* (i+1), 5 * i)]];    }            NSMutableArray* pointArr2 = [NSMutableArray array];    //生成随机点   2    for (int i = 0; i < 12; i++) {        [pointArr2 addObject:[NSValue valueWithCGPoint:CGPointMake(KlineWidth* (i + 1), 10 * i)]];    }                    //竖轴    NSMutableArray *vArr = [[NSMutableArray alloc]initWithCapacity:pointArr.count-1];    for (int i=0; i<9; i++) {        [vArr addObject:[NSString stringWithFormat:@"%d",i*20]];    }                            //横轴    NSMutableArray *hArr = [[NSMutableArray alloc]initWithCapacity:pointArr.count-1];        for (int i = 1; i <= 12; i++) {        [hArr addObject:[NSString stringWithFormat:@"%d",i]];    }           [line setHDesc:hArr];    [line setVDesc:vArr];    [line setArray:pointArr];    [line setArray1:pointArr2];        [self.view addSubview:line];                        }




0 0
原创粉丝点击