畫(huà)餅圖(Quartz2D)

餅圖_4.png

1.自定義視圖DrawView

  • 我們提供一個(gè)接口給外界,讓其傳入沒(méi)分餅圖的比例數(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; //記錄每次起始繪畫(huà)角度
@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];
}

/**
 *  重寫(xiě)set方法
 */
- (void)setPaths:(NSMutableArray *)paths{
    _paths = paths;
    // 重繪,會(huì)調(diào)用drawRect:方法
    [self setNeedsDisplay];
}

/**
 *  根據(jù)傳入比例數(shù)據(jù)繪畫(huà)餅狀圖
 *
 *  @param pieValues 繪畫(huà)餅狀圖初始化的比例數(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; /**< 繪畫(huà)餅狀圖的視圖 */

@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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容