本文主要是介绍Iphone画饼图工具类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
项目中需要画饼图,在此将工具类添出来:
h文件:
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>@interface CLMView : UIView
{float spaceHeight; //高度float scaleY ; NSArray *titleArr ; //文字NSArray *valueArr; //值NSArray *colorArr; //颜色
}@property(nonatomic, assign) float spaceHeight;
@property(nonatomic, assign) float scaleY;
@property(nonatomic, retain) NSArray *titleArr;
@property(nonatomic, retain) NSArray *valueArr;
@property(nonatomic, retain) NSArray *colorArr;@end
m文件:
#import "CLMView.h"#define K_PI 3.1415
#define KDGREED(x) ((x) * K_PI * 2)@implementation CLMView
@synthesize spaceHeight, scaleY;
@synthesize titleArr, valueArr, colorArr;- (id)initWithFrame:(CGRect)frame {self = [super initWithFrame:frame];if (self) {// Initialization codeself.backgroundColor = [UIColor colorWithRed:240.0f/255.0f green:1 blue:1 alpha:1.0];spaceHeight = 40;scaleY = 0.4;}return self;
}- (void)drawRect:(CGRect)rect
{CGContextRef context = UIGraphicsGetCurrentContext();//cgcontextsets//抗锯齿CGContextSetAllowsAntialiasing(context, TRUE);// int arr[5] = {20, 15, 35, 85 ,60};float sum = 0;for(int j=0;j< [valueArr count]; j++){sum += [[valueArr objectAtIndex:j] floatValue];}CGContextMoveToPoint(context, 160, 230);float currentangel = 0;//饼图CGContextSaveGState(context);CGContextScaleCTM(context, 1.0, scaleY);currentangel = 0;for(int i = 0; i< [valueArr count]; i++){float startAngle = KDGREED(currentangel);currentangel += [[valueArr objectAtIndex:i] floatValue] / sum;float endAngle = KDGREED(currentangel);//绘制上面的扇形CGContextMoveToPoint(context, 160, 230);[[colorArr objectAtIndex:i % [valueArr count]] setFill];[[UIColor colorWithWhite:1.0 alpha:0.8] setStroke];CGContextAddArc(context, 160, 230, 150, startAngle, endAngle, 0);CGContextClosePath(context);CGContextDrawPath(context, kCGPathFill);//绘制侧面float starx = cos(startAngle) * 150 +160;float stary = sin(startAngle) * 150 + 230;float endx = cos(endAngle) * 150 + 160;float endy = sin(endAngle) * 150 + 230;//float starty1 = stary + spaceHeight;float endy1 = endy + spaceHeight;if(endAngle < K_PI){//绘制厚度CGMutablePathRef path = CGPathCreateMutable();CGPathMoveToPoint(path, nil, starx, stary);CGPathAddArc(path, nil, 160, 230, 150, startAngle, endAngle, 0);CGPathAddLineToPoint(path, nil, endx, endy1);CGPathAddArc(path, nil, 160, 230 + spaceHeight, 150, endAngle, startAngle, 1);CGContextAddPath(context, path);[[colorArr objectAtIndex:i % [valueArr count]] setFill];[[UIColor colorWithWhite:0.9 alpha:1.0] setStroke];CGContextDrawPath(context, kCGPathFill);[[UIColor colorWithWhite:0.1 alpha:0.4] setFill];CGContextAddPath(context, path);CGContextDrawPath(context, kCGPathFill);}//只有弧度《 3.14 的才会画前面的厚度else if(startAngle < K_PI){endAngle = K_PI;endx = 10;endy1 = 230+spaceHeight;//绘制厚度CGMutablePathRef path = CGPathCreateMutable();CGPathMoveToPoint(path, nil, starx, stary);CGPathAddArc(path, nil, 160, 230, 150, startAngle, endAngle, 0);CGPathAddLineToPoint(path, nil, endx, endy1);CGPathAddArc(path, nil, 160, 230 + spaceHeight, 150, endAngle, startAngle, 1);CGContextAddPath(context, path);[[colorArr objectAtIndex:i % [valueArr count]] setFill];[[UIColor colorWithWhite:0.9 alpha:1.0] setStroke];CGContextDrawPath(context, kCGPathFill);[[UIColor colorWithWhite:0.1 alpha:0.4] setFill];CGContextAddPath(context, path);CGContextDrawPath(context, kCGPathFill);}else//break;//CGContextSetBlendMode(context, kCGBlendModeMultiply);}//整体渐变CGFloat componets [] = {0.0, 0.0, 0.0, 0.5,0.0,0.0,0.0,0.1};CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();CGGradientRef gradient = CGGradientCreateWithColorComponents(colorspace, componets, nil, 2);CGContextDrawRadialGradient(context, gradient, CGPointMake(160,230), 0, CGPointMake(160,230), 150, 0 );CFRelease(colorspace);CGGradientRelease(gradient);CGContextRestoreGState(context);//绘制文字for(int i = 0; i< [valueArr count]; i++){float origionx = 50 ;float origiony = i * 30 + 200;[[colorArr objectAtIndex:i % [valueArr count]] setFill];CGContextFillRect(context, CGRectMake(origionx, origiony, 20, 20));CGContextDrawPath(context, kCGPathFill);if(i< [titleArr count]){NSString *title = [ titleArr objectAtIndex:i];[title drawAtPoint:CGPointMake(origionx + 50, origiony) withFont:[UIFont systemFontOfSize:16]];}}}- (void)dealloc {[titleArr release];[valueArr release];[colorArr release];[super dealloc];
}@end
调用:(主要是设置cv的titleArr,valueArr,colorArr)
NSMutableArray *title = [[NSMutableArray alloc]init];NSMutableArray *value = [[NSMutableArray alloc]init];NSMutableArray *color = [[NSMutableArray alloc]init];NSArray *Allcolor = [NSArray arrayWithObjects:[UIColor yellowColor], [UIColor blueColor],[UIColor redColor], [UIColor brownColor], [UIColor purpleColor] , [UIColor orangeColor],[UIColor greenColor],[UIColor grayColor],[UIColor colorWithRed:135.0f/255.0f green:206.0f/255.0f blue:235.0f/255.0f alpha:1],[UIColor colorWithRed:240.0f/255.0f green:1 blue:1 alpha:1],[UIColor colorWithRed:1 green:0 blue:1 alpha:1],[UIColor colorWithRed:0 green:199.0f/255.0f blue:140.0f/255.0f alpha:1],[UIColor colorWithRed:160.0f/255.0f green:32.0f/255.0f blue:240.0f/255.0f alpha:1],[UIColor colorWithRed:124.0f/255.0f green:252.0f/255.0f blue:0 alpha:1],nil];for(int i = 0;i<[self.onetableDatacostchat count];i++){float bilv = [[self.onetableDatacostchat objectAtIndex:i] floatValue]/[self.zongcost floatValue];float lastbilv = bilv*100;[title addObject:[NSString stringWithFormat:@"%@ %f%@",[self.onetableDatawenzichat objectAtIndex:i],lastbilv,@"%"]];[value addObject:[NSNumber numberWithInt:lastbilv]];[color addObject:[Allcolor objectAtIndex:i]];}CLMView *cv = [[CLMView alloc] initWithFrame:CGRectMake(0, 0, 320, 440)];cv.titleArr = title;cv.valueArr = value;cv.colorArr = color;[self.view addSubview: cv];[cv release];[title release];[value release];[color release];
这篇关于Iphone画饼图工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!