您的位置:首页 > 其它

Quartz2D-05.利用贝瑟尔曲线实现进度条功能

2015-08-05 22:18 302 查看
效果图



代码实现

// .h文件
#import <UIKit/UIKit.h>
@interface ZJProgressView : UIView
/**
* 传入进度
*/
@property (nonatomic, assign) CGFloat progress;
@end
//.m文件
#import "ZJProgressView.h"

@implementation ZJProgressView

- (void)drawRect:(CGRect)rect {
[self drawLoop];
}
// 重写setter方法
-(void)setProgress:(CGFloat)progress{
_progress = progress;
// 每次调用setter方法,就重新绘制视图
[self setNeedsDisplay];
}
// 画圆环
-(void)drawLoop
{
// 创建贝瑟尔路径
UIBezierPath *path = [UIBezierPath bezierPath];
// 计算视图位置属性
CGFloat viewW = self.bounds.size.width;
CGFloat viewH = self.bounds.size.height;
CGPoint center = CGPointMake(viewW * 0.5, viewH * 0.5);
CGFloat margin = 2;
// 当前进度条位置
CGFloat curAngle = M_PI * 2 * _progress/100.0 - M_PI_2;
// 画弧
[path addArcWithCenter:center radius:viewW * 0.5 - margin startAngle:-M_PI_2 endAngle:curAngle clockwise:YES];

// 设置线宽
path.lineWidth = 3;
// 设置画笔颜色
[[UIColor blueColor] setStroke];

// 路径走线
[path stroke];

}
//控制器实现代码.m
#import "ViewController.h"
#import "ZJProgressView.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *progressLabel;
@property (weak, nonatomic) IBOutlet ZJProgressView *progressView;
@end
@implementation ViewController
// 监听滑块的值改变事件
- (IBAction)sliderValueChange:(UISlider *)sender {
// 进度标签赋值
_progressLabel.text = [NSString stringWithFormat:@"%.2f%%",sender.value];
// 进度条赋值
_progressView.progress = sender.value;
}

- (void)viewDidLoad {
[super viewDidLoad];

}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: