iPhone开发之自定义柱状图

//
//  Histogram.h
//  CGraph
//
//  Created by Fox on 12-4-16.
//  Copyright 2012 __MyCompanyName__. All rights reserved.
//
//绘制柱状图

#import <UIKit/UIKit.h>
#define kindex 4

@interface Histogram : UIView {
	CGFloat colors[kindex][4];//每一个柱状图的颜色
	CGRect  rects[kindex];//每一个柱状图的大小形状
	CGContextRef canvas;
	CGFloat x;
	CGFloat y;
	CGFloat w;//柱状图宽
	CGFloat h;//柱状图高
    CGFloat height[kindex];//每一个柱状图的高度
}
@property (nonatomic, assign) CGContextRef canvas;

//设置柱状图的高度
- (void)initHistogramHeight:(float)height1 height2:(float)height2  height3:(float)height3 height4:(float)height4;

@end

  

//
//  Histogram.m
//  CGraph
//
//  Created by Fox on 12-4-16.
//  Copyright 2012 __MyCompanyName__. All rights reserved.
//

#import "Histogram.h"

@interface Histogram()

- (void)initHistogramHeight:(float)height1 height2:(float)height2  height3:(float)height3 height4:(float)height4;

@end

@implementation Histogram
@synthesize canvas;

- (id)initWithFrame:(CGRect)frame {
    
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code.
    }
    return self;
}

//设置柱状图的高度
- (void)initHistogramHeight:(float)height1 height2:(float)height2  height3:(float)height3 height4:(float)height4{
    height[0] = height1;
    height[1] = height2;
    height[2] = height3;
    height[3] = height4;
}

- (void)drawRect:(CGRect)rect {

    int index;
    float rgb = 255;
	//RGB颜色值为4个组成,前三个分别代表R、G、B对应的值/256,最后一个代表透明度
	
	//设置四个柱状图的颜色
    colors[0][0] = 176/rgb;
    colors[0][1] = 224/rgb;
    colors[0][2] = 230/rgb;
    colors[0][3] = 1.0;//透明度
    
    
    colors[1][0] = 135/rgb;
    colors[1][1] = 206/rgb;
    colors[1][2] = 235/rgb;
    colors[1][3] = 1.0;
    
    
    colors[2][0] = 245/rgb;
    colors[2][1] = 222/rgb;
    colors[2][2] = 179/rgb;
    colors[2][3] = 1.0;
    
    
    colors[3][0] = 46/rgb;
    colors[3][1] = 139/rgb;
    colors[3][2] = 87/rgb;
    colors[3][3] = 1.0;
    
    rects[0] = CGRectMake(5, 5,height[0]*200,25);
    rects[1] = CGRectMake(5, 55,height[1]*200,25);
    rects[2] = CGRectMake(5, 105,height[2]*200,25);
    rects[3] = CGRectMake(5, 155,height[3]*200, 25);
    
    self.canvas = UIGraphicsGetCurrentContext();
//	CGContextTranslateCTM(self.canvas, 20, rect.size.height-20);
//	CGContextScaleCTM(self.canvas, 1.0, 1.0); //可以设置相反方向的柱状图

	for (index = 0; index<kindex; index++) {
		CGContextBeginPath(self.canvas);//初始化绘图
		
		CGContextSetFillColor(self.canvas, colors[index]);//设置柱状图的颜色
		CGContextAddRect(self.canvas, rects[index]);//设置柱状图的形状
		
		CGContextClosePath(self.canvas);//结束绘图
		CGContextFillPath(self.canvas);
	}
}




- (void)dealloc {
    [super dealloc];
}


@end

  那么如何使用呢?使用起来很简单,初始化,设置frame,通过initHistogramHeight来设置高度,将该视图添加到当前主视图中即可。

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    Histogram *histogram = [[Histogram alloc] initWithFrame:CGRectMake(50, 50, 240, 240)];
    histogram.backgroundColor = [UIColor clearColor];
    [histogram initHistogramHeight:0.5 height2:0.6 height3:0.7 height4:0.8];
    [self.view addSubview:histogram];
	
}

  

原文地址:https://www.cnblogs.com/foxmin/p/2498133.html