1.自定义视图DrawView
- 我们提供一个接口给外界,让其传入没分饼图的比例数组,屏蔽绘制饼图的细节
2.实现
// .h 文件
#import <UIKit/UIKit.h>
@interface DrawingView : UIView
// 提供一个接口
- (void)drawPieWithPaths:(NSArray *)pieValues;
@end
// .m文件实现
#import "DrawingView.h"
#define kCenter CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5)
#define radious self.frame.size.width * 0.5 - 20
@interface DrawingView ()
@property (nonatomic, strong) NSMutableArray *paths;
@property (nonatomic, assign) CGFloat startAngle; //记录每次起始绘画角度
@end
@implementation DrawingView
- (void)drawRect:(CGRect)rect {
for (UIBezierPath *path in self.paths) {
[path stroke];
[[self randomColor] set];
[path fill];
}
}
/**
* 返回随机颜色
*/
- (UIColor *)randomColor{
CGFloat r = arc4random_uniform(256) / 255.0;
CGFloat g = arc4random_uniform(256) / 255.0;
CGFloat b = arc4random_uniform(256) / 255.0;
return [UIColor colorWithRed:r green:g blue:b alpha:1];
}
/**
* 重写set方法
*/
- (void)setPaths:(NSMutableArray *)paths{
_paths = paths;
// 重绘,会调用drawRect:方法
[self setNeedsDisplay];
}
/**
* 根据传入比例数据绘画饼状图
*
* @param pieValues 绘画饼状图初始化的比例数据
*/
- (void)drawPieWithPaths:(NSArray *)pieValues{
CGFloat endAngle = 0;
NSMutableArray *tempPaths = [[NSMutableArray alloc] init];
UIBezierPath *path = nil;
for (NSNumber *value in pieValues) {
path = [[UIBezierPath alloc] init];
endAngle = _startAngle + [value floatValue] / 100 * M_PI * 2;
[path addArcWithCenter:kCenter radius:radious startAngle: _startAngle endAngle:endAngle clockwise:YES];
[path addLineToPoint:kCenter];
[tempPaths addObject:path];
_startAngle = endAngle;
}
self.paths = tempPaths;
}
/**
* 点击重绘视图
*
*/
//- (void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{
// [self setNeedsDisplay];
//}
@end
3.使用
#import "ViewController.h"
#import "DrawingView.h"
@interface ViewController ()
@property (nonatomic, weak) DrawingView *drawView; /**< 绘画饼状图的视图 */
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
DrawingView *drawView = [[DrawingView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
drawView.backgroundColor = [UIColor grayColor];
[self.view addSubview:drawView];
self.drawView = drawView;
[self.drawView drawPieWithPaths:@[@25, @25, @50]];
}
@end