1.自定義視圖DrawView
- 我們提供一個(gè)接口給外界扣唱,讓其傳入沒分餅圖的比例數(shù)組,屏蔽繪制餅圖的細(xì)節(jié)
2.實(shí)現(xiàn)
// .h 文件
#import <UIKit/UIKit.h>
@interface DrawingView : UIView
// 提供一個(gè)接口
- (void)drawPieWithPaths:(NSArray *)pieValues;
@end
// .m文件實(shí)現(xiàn)
#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];
}
}
/**
* 返回隨機(jī)顏色
*/
- (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;
// 重繪,會調(diào)用drawRect:方法
[self setNeedsDisplay];
}
/**
* 根據(jù)傳入比例數(shù)據(jù)繪畫餅狀圖
*
* @param pieValues 繪畫餅狀圖初始化的比例數(shù)據(jù)
*/
- (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;
}
/**
* 點(diǎn)擊重繪視圖
*
*/
//- (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