Iphone画饼图工具类

2023-10-08 03:18
文章标签 工具 iphone 画饼

本文主要是介绍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画饼图工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/162327

相关文章

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li