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实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in