IOS-使用CAShapLayer绘制扇形
IOS-使用CAShapLayer绘制扇形
为了增加应用体验感,我们动态绘制扇形或者饼状图效果。
这里我们使用CAShapeLayer,这样就不必再-(void)draw函数内绘制图形
参考代码
-(void)reDraw
{
CAShapeLayer *chartLine;
if (chartLine!=nil)
{
[chartLine removeAllAnimations];//这样就能重复绘制饼状图了
}
else
{
chartLine = [CAShapeLayerlayer];
chartLine.lineWidth = 40;//这里设置填充线的宽度,这个参数很重要
chartLine.lineCap = kCALineCapButt;设置线端点样式,这个也是非常重要的一个参数
chartLine.strokeColor = [[UIColor redColor] CGColor];//绘制的线的颜色
chartLine.fillColor = nil;
self.clipsToBounds = NO;//该属性表示如果图形绘制超过的容器的范围是否被裁掉,这里我们设置为YES ,表示要裁掉超出范围的绘制
[self.layer addSublayer:chartLine];
}
CGMutablePathRef pathRef = CGPathCreateMutable();
CGPathAddArc(pathRef, &CGAffineTransformIdentity,
CGRectGetWidth(self.frame)/2, CGRectGetHeight(self.frame)/2, 60, 0, M_PI*3/2, NO);
chartLine.path = pathRef;
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
pathAnimation.duration = 1.1;//设置绘制动画持续的时间
pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];
pathAnimation.autoreverses = NO;//是否翻转绘制
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.repeatCount = 1;
[chartLine addAnimation:pathAnimation forKey:@"strokeEndAnimation"];
chartLine.strokeEnd=1.0f;//表示绘制到百分比多少就停止,这个我们用1表示完全绘制
}
我们先来看看绘制的效果图:

这里我们有必要说下,扇形(饼状图的原理),我们绘制的其实不是扇形,可以说是圆形,我们只是将圆形的边线宽度变得很宽,比如:我们想要绘制的圆形的半径是 R = 100,如果我们想绘制扇形就可以设置变宽为 200,因为,线是从中间到圆心来标定半径的,这样,边线宽度= 200,那么,从边线重新到圆心的距离就是200/2 = 100,这样你看,100==R,这样,效果就看起来我们绘制的是饼状图了。我们绘制的不是真正的饼状图,而是用其他的方法绘制饼状图的效果而已,这里我们特别需要主要的是,如果你想成功的绘制饼状图,那么你就需要掌握好,圆形半径以及圆形边线的宽度值,以及他们之间的比例关系,因为他们之间的关系决定了你要绘制的饼状图的效果以及形状,比如:时候中间有空心,以及空心的大小。
Jason
2014年03月21日
IOS-使用CAShapLayer绘制扇形的更多相关文章
- iOS可视化动态绘制连通图
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- 绘制扇形效果线条小Bug解决
绘制线条基本代码: 变量: CPoint m_ptOrigin;//起点坐标 bool m_bTrue;//检查鼠标左键是否按下 CPoint m_ptOldOrigin;//记录上一次绘制终点坐标, ...
- iOS界面的绘制和渲染
界面的绘制和渲染 UIView是如何到显示的屏幕上的. 这件事要从RunLoop开始,RunLoop是一个60fps的回调,也就是说每16.7ms绘制一次屏幕,也就是我们需要在这个时间内完成view的 ...
- iOS 使用drawRect: 绘制虚线椭圆
iOS 使用drawRect: 绘制虚线椭圆 1:首先如果要使用 drawRect 绘图 要导入 CoreGraphics.framework 框架 然后 创建 自定义view, 即是 myView继 ...
- iOS的阴影绘制及性能优化
今天来讲讲iOS开发过程中的阴影绘制及其潜在的绘图性能问题.虽然在开发过程中,我们使用阴影功能的机会不是很多,但是如果用了,有可能引起如卡顿等性能问题,所以,还是有必要来探究一下阴影的绘制过程,及如何 ...
- iOS可视化动态绘制连通图(Swift版)
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- [ActionScript 3.0] 动态绘制扇形实例(拖拽绘制)
package { import flash.display.Shape; import flash.display.Sprite; import flash.events.MouseEvent; / ...
- [ActionScript 3.0] 绘制扇形方法
/** * 绘制扇形 * @param mc 承载扇形的对象 * @param x 圆心角x * @param y 圆心角y * @param r 半径 * @param angle 绘制角度 * @ ...
- Unity3D之Mesh(六)绘制扇形、扇面、环形
前言: 绘制了圆,就想到绘制与之相关的几何图形,以便更灵活的掌握Mesh动态创建模型的机制与方法. 一.分析: 首先,结合绘制圆的过程绘制环形: 圆形是由segments个等腰三角形组成的(上一篇中, ...
随机推荐
- LeetCode summary
https://www.programcreek.com/2013/08/leetcode-problem-classification/ https://medium.com/algorithms- ...
- 宁夏邀请赛F FLOYD
Moving On Firdaws and Fatinah are living in a country with nn cities, numbered from 11 to nn.Each ci ...
- POJ:3273-Monthly Expense
Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 32067 Accepted: 12081 Des ...
- python-4函数式编程
1-高阶函数 变量可以指向函数. def add(x, y, f): 例如f参数为函数 编写高阶函数,就是让函数的参数能够接收别的函数. Python内建了map()和reduce()高阶函数. ...
- 邮件系统之Postfix与Dovecot
电子邮件系统 电子邮件系统基于邮件协议来完成电子邮件的传输,常见的邮件协议有: 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件, ...
- Oracle 11g数据库安装与卸载的方法图解(windows)
一.Oracle 11g安装 安装之前要先确定自己的电脑配置,以windows为例,如果是win7以下系统如xp等,可以选择Oracle 10g.因为10g的程序文件只有200多兆,而11g及达到了2 ...
- 路由vue-router进阶
目录 1. 导航守卫 1.1. 全局守卫 1.2. 全局解析守卫 1.3. 全局后置钩子 1.4. 路由独享的守卫 1.5. 组件内的守卫 1.6. 完整的导航解析流程 2. 路由元信息 3. 获取数 ...
- 图解java面试
图解Java面试题:基本语法 2017-02-07 14:34 出处:清屏网 人气:178 评论(0) 内容大纲.png &和&&的区别 &和&&的 ...
- quick sort去除无用判断
#include <stdio.h> #include <stdlib.h> //int a[]={1000,10000,9,10,30,20,50,23,90,100,10} ...
- 剑指Offer - 九度1372 - 最大子向量和(连续子数组的最大和)
剑指Offer - 九度1372 - 最大子向量和(连续子数组的最大和)2013-11-23 16:25 题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天JOBDU测试组开完会后, ...