IOS-Quartz2D进度条控制扇形统计图

Quartz2D是一个二维绘图引擎,同时支持iOS和Mac系统

Quartz2D的API是纯C语言的

Quartz2D的API来自于Core Graphics框架(CoreCraphics.framework),数据类型和函数都是以CG作为前缀(iOS6之后框架已经默认被导入进来)

1>首先我们需要先创建一个新视图ProgressView继承UIView

为了更方便我们给新视图添加一个Xib将lable控件拖入xib为了显示百分比

好,下面正式开始.

2>首先我们在ProgressView.h中创建一个进度值属性

#pragma mark - 进度值(供调用类去动态设置)

@property (nonatomic, assign) CGFloat progress;

3>接下来开始绘制图形ProgressView.m中

          1.我们将xib中的Label用拖拽的方式进行添加

@property (weak, nonatomic) IBOutlet UILabel *progressLabel;

          2.绘图需要调用此方法- (void)drawRect:(CGRect)rect

#pragma mark - 当视图第一次显示时就会调用

// 参数:rect(就是相当于self.bounds)

// 作用:绘图

- (void)drawRect:(CGRect)rect

{

//    定义扇形中心

CGPoint origin = CGPointMake(150  , 150);

//    定义扇形半径

CGFloat radius = 100.0f;

//    设定扇形起点位置

CGFloat startAngle = - M_PI_2;

//    根据进度计算扇形结束位置

CGFloat endAngle = startAngle + self.progress * M_PI * 2;

//    根据起始点、原点、半径绘制弧线

UIBezierPath *sectorPath = [UIBezierPath bezierPathWithArcCenter:origin radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];

//    从弧线结束为止绘制一条线段到圆心。这样系统会自动闭合图形,绘制一条从圆心到弧线起点的线段。

[sectorPath addLineToPoint:origin];

//    设置扇形的填充颜色

[[UIColor blueColor] set];

//    设置扇形的填充模式

[sectorPath fill];

}

4>既然是可以变动的视图,那么每一次变动都需要重新绘制

#pragma mark - progress的set方法

- (void)setProgress:(CGFloat)progress

{

_progress = progress;

_progressLabel.text = [NSString stringWithFormat:@"%.2f%%", _progress * 100];

// 视图重绘(重新调用drawRect方法)

[self setNeedsDisplay];

}

5>ViewController.m中

创建一个进度条和一个滑动条

// 进度条

@property (nonatomic, strong) ProgressView *progressView;

- (void)viewDidLoad {

[super viewDidLoad];

// 自定义进度条

_progressView = [[NSBundle mainBundle] loadNibNamed:@"ProgressView" owner:nil options:nil].firstObject;

_progressView.bounds = CGRectMake(0, 0, 300, 300);

_progressView.center = CGPointMake(self.view.bounds.size.width / 2.0, 120);

_progressView.progress = 0;

[self.view addSubview:_progressView];

// 滑动条

UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width - 60, 30)];

slider.center = CGPointMake(self.view.bounds.size.width / 2.0, CGRectGetMaxY(_progressView.frame) + 30);

slider.value = 0;

[slider addTarget:self action:@selector(changeSliderValue:) forControlEvents:UIControlEventValueChanged];

[self.view addSubview:slider];

}

然后我们需要为滑动条添加一个滑动事件,当值改变的时候进行触发

#pragma mark - 滑动事件

- (void)changeSliderValue:(UISlider *)slider

{

// 动态设置进度条的值(progress)

_progressView.progress = slider.value;

}

搞定

你可能感兴趣的:(IOS-Quartz2D进度条控制扇形统计图)