iphone上如何绘制饼图(使用CGContextAddArc)(原创)



CGContextAddArc是一个比较强大的函数,建议仔细看一下iphone的开发文档。

CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, intclockwise)

 

  • CGContextRef: 图形上下文
  • x,y: 开始画的坐标
  • radius: 半径
  • startAngle, endAngle: 开始的弧度,结束的弧度
  • clockwise: 画的方向(顺时针,逆时针)
GraphView.h文件:

 

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>@interface GraphView : UIView {}@end

 

 

 

GraphView.m文件:
#import "GraphView.h"
#define PI 3.14159265358979323846
static inline float radians(double degrees) { return degrees * PI / 180; }@interface GraphView(private)
//如果有什么私有方法,在这里声明
@end@implementation GraphView- (id)initWithFrame:(CGRect)frame {if ((self = [super initWithFrame:frame])) {// Initialization code}return self;
}- (void)drawRect:(CGRect)rect {CGRect parentViewBounds = self.bounds;CGFloat x = CGRectGetWidth(parentViewBounds)/2;CGFloat y = CGRectGetHeight(parentViewBounds)*0.55;// Get the graphics context and clear itCGContextRef ctx = UIGraphicsGetCurrentContext();CGContextClearRect(ctx, rect);// define stroke colorCGContextSetRGBStrokeColor(ctx, 1, 1, 1, 1.0);// define line widthCGContextSetLineWidth(ctx, 4.0);// need some values to draw pie chartsdouble snapshotCapacity =20;double rawCapacity = 100;double systemCapacity = 1;int offset = 5;double pie1_start = 315.0;	double pie1_finish = snapshotCapacity *360.0/rawCapacity; double system_finish = systemCapacity*360.0/rawCapacity;CGContextSetFillColor(ctx, CGColorGetComponents( [[UIColor greenColor] CGColor]));CGContextMoveToPoint(ctx, x+2*offset, y);     CGContextAddArc(ctx, x+2*offset, y, 100,  radians(snapshot_start), radians(snapshot_start+snapshot_finish), 0); CGContextClosePath(ctx); CGContextFillPath(ctx); // system capacity CGContextSetFillColor(ctx, CGColorGetComponents( [[UIColor colorWithRed:15 green:165/255 blue:0 alpha:1 ] CGColor]));CGContextMoveToPoint(ctx, x+offset,y);     CGContextAddArc(ctx, x+offset, y, 100,  radians(snapshot_start+snapshot_finish+offset), radians(snapshot_start+snapshot_finish+system_finish), 0); CGContextClosePath(ctx); CGContextFillPath(ctx); /* data capacity */CGContextSetFillColor(ctx, CGColorGetComponents( [[UIColor colorWithRed:99/255 green:184/255 blue:255/255 alpha:1 ] CGColor]));CGContextMoveToPoint(ctx, x, y);     CGContextAddArc(ctx, x, y, 100,  radians(snapshot_start+snapshot_finish+system_finish+offset), radians(snapshot_start), 0); CGContextClosePath(ctx); CGContextFillPath(ctx);	
}- (void)dealloc {[super dealloc];
}
@end


调用代码如下:
GraphView* viewTest = [[GraphView alloc] initWithFrame:CGRectMake(x,y,width,height)];
[self.view addsubView:viewTest];
[viewTest release];


效果图如下:


转载于:https://www.cnblogs.com/moshengren/archive/2010/10/19/1855246.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现itchat_GitHub - Xiazki/itchat4j: wechatbot 的java实现,简单搭建了基本框架和实现了扫码登陆,具体网页微信api请参考...

itchat4j 微信自动回复机器人-------------- --------------- ---------------| | | | | || Get UUID | | Get Contact | | Status Notify || | | | | |------------- -------^------- -------^-------| | || ------- --------| | |-------v------ ------------- -------------…

华为宣布:免费培养8000名开发者! 学习免费!实验免费!考证免费!

很多朋友都想储备一些不同领域的新技术以便未来有更好的发展但目前市面上各种教程质量良莠不齐而且想要掌握高阶的开发技术需要耗费大量的时间和精力So&#xff0c;华为云特别推出 互联网技能加油站包含物联网、Python、AI等五大领域&#xff0c;核心技术赋能构建全面技能体系现…

ruby

官网 http://www.ruby-lang.org/en/ https://ruby-china.org/ DOC http://ruby-doc.com/docs/ProgrammingRuby/ http://ruby-doc.org/core-2.2.1/ 六个最酷的Ruby on Rails项目 https://www.ctocio.com/ccnews/20453.html Rake: Ruby中任务构建工具rake的入门 https://www.cnbl…

java 两个点球面距离_计算球面两点间距离实现Vincenty+Haversine

vincenty公式 精度很高能达到0.5毫米&#xff0c;但是很慢。Haversine公式半正矢公式&#xff0c;比vincenty快&#xff0c;精度没有vincenty高&#xff0c;也长使用。-------------------------------------------openlayers中实现的Vincenty-------------------------------…

送20个鼠标垫

之前发的朋友圈&#xff0c;里面晒了一个鼠标垫&#xff0c;大家都挺喜欢的&#xff0c;这次决定送30个给大家&#xff0c;没有什么规则&#xff0c;直接抽奖就好了。在下方的公众号回复【1001】获取抽奖小程序。因为之前好几次抽奖&#xff0c;因为时间比较长导致大家忘记填写…

angularjs的表单验证

angularjs的表单验证 废话&#xff1a;angular的热度在减小&#xff0c;但是老项目依旧是angular的&#xff0c;就是不能丢&#xff0c;得会 干活直接上代码  <!DOCTYPE html> <html> <head><!-- CSS --><link rel"stylesheet" href&qu…

越老越值钱,除了程序员!

-我们见过太多靠经验、资历“镀金”的职业。司机、教师、医生、律师、会计……这些职业的薪资待遇、社会地位、声誉等等都会随着从业时间的增长而变得越来越高、越来越好。“老”这个字&#xff0c;对于这类的职业来说&#xff0c;更像是褒奖。大家对于“资深”的他们&#xff…

Visual Studio 2010授权修改

为什么80%的码农都做不了架构师&#xff1f;>>> 参见以下步骤&#xff1a; 32位的系统中&#xff0c;修改以下注册表键值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Registration\UserName HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Curr…

Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验

Net Core平台灵活简单的日志记录框架NLogSqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLogMysql组合初体验][http://www.cnblogs.com/yilezhu/p/9416439.html]" 反响还行。有网友就说有了NLogMySql的组合&#xff0c;那如果我是用SqlServer怎么…

从单片机步入Linux之文件系统的构建

大家好&#xff0c;我是情报小哥&#xff01;本文为【从单片机步入嵌入式Linux】系列文章的第四篇文章&#xff0c;前面三篇大家有时间也可以回头阅读一下&#xff0c;本系列文章的很多知识我都会从裸机开发和理解的角度来分析&#xff0c;帮助大家迅速理解Linux系统相关的知识…

pythongui界面小程序_python界面小程序

Python支持多種圖形界面的第三方庫&#xff0c;包括&#xff1a;TkwxWidgetsQtGTK等等。但是Python自帶的庫是支持Tk的Tkinter&#xff0c;使用Tkinter&#xff0c;無需安裝任何包&#xff0c;就可以直接使用。本章簡單介紹如何使用Tkinter進行GUI編程。Tkinter我們來梳理一下概…

关于Linq to SQL 的“异常详细信息: System.InvalidCastException: 指定的转换无效。”

开发环境&#xff1a;VS2010,SQL Server2005,Windows7,使用LINQ to SQL作为ORM 运行环境&#xff1a;Windows2003(IIS6),.NET 3.5 SP1,SQL Server2000 症状&#xff1a;开发环境下一切正常&#xff0c;在运行环境中出现如下错误&#xff1a; 代码 指定的转换无效。 说明: 执行当…

由百度 “PHP薪资” 引发的思考

昨天晚上睡觉的时候百度了一下 “PHP薪资”&#xff0c;看到了各种各样的答案&#xff0c;从百度知道到知乎&#xff0c;再到各个论坛……答案也是从 2k-16k 不等&#xff08;不过说实话&#xff0c;2k是吓到我了&#xff09;&#xff0c;其中一些答案说到了在中国从事某一行业…

哈希存储 java_Java容器系列之HashMap的存储

Java容器系列之HashMap概要本文将结合Java源码总结HashMap的存储结构及其扩容策略&#xff0c;并根据这些特点给出使用HashMap的最佳实践。本文不再介绍HashMap的基本使用&#xff0c;有需要的请先学习下Java容器的基础知识。存储结构HashMap的核心问题是如何保证读写的速度&am…

你增长的年龄,是因为丢掉了快乐吗?

这是周末&#xff0c;想写一篇文章给自己的一个朋友&#xff0c;试看能否解开他不安的情绪。我朋友是我真的朋友几年前我还是很害羞的我&#xff0c;有一次开技术会上&#xff0c;他公开的介绍了我&#xff0c;我觉得是一种认可&#xff0c;当然&#xff0c;也不会有一个不喜欢…

redhat5中架设DHCP服务器与DHCP中继

作者&#xff1a;奇异果Wickey Email&#xff1a;hkb178149081163.com 实验平台&#xff1a;VMvare 系统&#xff1a;RedHat5 软件包&#xff1a;DHCP-3.0.5 模拟需求分析&#xff1a;&#xff08;暂无&#xff09; 拓扑图&#xff1a; 1. 配置DHCPServer IP与GW 2. 安装DHCP…

linux下安装jdk_mysql_tomcat_redis

目前搬我以前的笔记,每个人做笔记方式都不一样,看别人的风格,生成自己的风格1.linux安装软件和redis学习jdk --- java开发运行环境Tomcat - WEB程序的服务器Mysql -- 持久化存储数据Redis -- 数据库 &#xff0c;和MySQL原理不同//linux通用软件安装流程&#xff1a;(jdk安装)…

MCU HardFault问题查找和破解方法

一、HardFault产生原因和常规分析方法二、HardFault解决方法分析三、HardFault回溯的原理四、操作分析流程&#xff1a;1. 心里明白徒手分析法2. CmBacktrace 天龙大法五、总结一、HardFault产生原因和常规分析方法在嵌入式开发中&#xff0c;偶尔会遇到Hard Fault死机的异常&…

centos8 apache php,centos6.8安装php7 for Apache2

1&#xff0c;php for nginx就不用说了&#xff0c;我们的博客里面应该有写。 2&#xff0c;直接源码安装&#xff0c;安装apache&#xff0c;安装php7&#xff0c;安装mysql。除了麻烦一点&#xff0c;应该没什么问题。 3&#xff0c;yum的方式安装了apache和mysql&#xff0c…

php 逗号 分割字符串

介绍两个函数给你 <?php //利用 explode 函数分割字符串到数组 $source "hello1,hello2,hello3,hello4,hello5";//按逗号分离字符串 $hello explode(,,$source); for($index0;$index<count($hello);$index){ echo $hello[$index];echo "</br>&qu…