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

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析