
pie.gif
這是看了小馬哥的視頻整理的筆記。
這是看了小馬哥的視頻整理的筆記。
這是看了小馬哥的視頻整理的筆記。(怕被罵說(shuō)抄襲)
最終的效果如上圖所示,點(diǎn)的有點(diǎn)快。
首先,確定一點(diǎn),餅狀圖是由一個(gè)扇形挨著一個(gè)扇形拼成的。
數(shù)據(jù)源NSArray *arr = [];
設(shè)扇形的起點(diǎn)角度為CGFloat startA;
扇形的弧度為angle = [arr[i] doubleValue] / total * M_PI * 2;
那么扇形的終點(diǎn)弧度為 endA = startA + angle;
使用UIBezierPath畫(huà)扇形的核心代碼如下
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:redius startAngle:startA endAngle:endA clockwise:YES];
[path addLineToPoint:center];
[[self color]set];
[path fill];
難道說(shuō)餅狀圖由幾部分,我們就要?jiǎng)?chuàng)建幾個(gè)UIBezierPath嗎?當(dāng)然不能夠啊。
我們?cè)谧远x的view的drawRect方法中進(jìn)行扇形的繪制如下:
- (void)drawRect:(CGRect)rect {
// Drawing code
NSArray *arr = [self arr];
CGFloat redius = rect.size.width * 0.5;
CGPoint center = CGPointMake(redius, redius);
CGFloat startA = 0;
CGFloat angle = 0;
CGFloat endA = 0;
for (int i = 0 ; i < arr.count; i ++) {
startA = endA;
angle = [arr[i] doubleValue] / 100.0 * M_PI * 2;
endA = startA + angle;
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:redius startAngle:startA endAngle:endA clockwise:YES];
[path addLineToPoint:center];
[[self color]set];
[path fill];
}
}
- 產(chǎn)生一個(gè)隨機(jī)數(shù)組來(lái)做為餅狀圖的數(shù)據(jù)源
-(NSArray *)arr{
int total = 100;
int temp = 0;
NSMutableArray * arr= [NSMutableArray array];
for (int i = 0; i < 9; i++) {
temp = arc4random_uniform(total);
[arr addObject:@(temp)];
total -= temp;
}//在這里需要進(jìn)行判斷total是因?yàn)?,隨機(jī)出來(lái)的這9個(gè)數(shù)的和不一定正好是100 ,所以需要進(jìn)行判斷total
if (total) {
[arr addObject:@(total)];
}
return arr;
}
- 獲取隨機(jī)顏色
-(UIColor *)color{
CGFloat red = arc4random_uniform(256.0)/255.0;
CGFloat green = arc4random_uniform(256.0)/255.0;
CGFloat blue = arc4random_uniform(256.0)/255.0;
return [UIColor colorWithRed:red green:green blue:blue alpha:1];
}