画饼图(Quartz2D)

画饼图(Quartz2D)_第1张图片
饼图_4.png

1.自定义视图DrawView

  • 我们提供一个接口给外界,让其传入没分饼图的比例数组,屏蔽绘制饼图的细节

2.实现

// .h 文件
#import 

@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 *)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

你可能感兴趣的:(画饼图(Quartz2D))