iOS畫折線圖

來源:互聯網
上載者:User

 

 

 

LineChartViewDemo.h

 

#import @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];                        }


 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.