饼状图

简化

- (void)drawRect:(CGRect)rect
{
    
    NSArray *arr = @[@25,@35,@40];
    CGPoint center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5);
    CGFloat radius = self.frame.size.width * 0.5 - 5;
    CGFloat startAngel = -M_PI_2;
    CGFloat endAngel = 0;
    for (NSNumber *num in arr) {
        CGFloat number = num.intValue/100.0;
        endAngel = number * 2 * M_PI + startAngel;
        UIBezierPath *path1 = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startAngel endAngle:endAngel clockwise:YES];
//  添加一根线到圆心
        [path1 addLineToPoint:center];
        [[self randomColor] set] ;
        [path1 fill];
        startAngel = endAngel;
    }
    
}

//生成一个随机的颜色
- (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];
}

用contextRef做

第一步, 获取上下文
        第二步,拼接路径 ,绘制第一个扇形
         获取上下文
         CGContextRef ctx =  UIGraphicsGetCurrentContext();
         CGPoint center = CGPointMake(125, 125);
         CGFloat radius = 100;
         CGFloat startA = 0;
         CGFloat endA = 0;
         CGFloat angle = 25 / 100.0 * M_PI * 2;
         endA = startA + angle;
         拼接路径
         UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center 
                                                              radius:radius 
                                                              startAngle:startA 
                                                              endAngle:endA 
                                                              clockwise:YES];

         添加一根线到圆心
         [path addLineToPoint:center];
         把路径添加到上下文
         CGContextAddPath(ctx, path.CGPath);
         把上下文渲染到View
         CGContextFillPath(ctx);
  • 注意点: CGFloat angle = 25 / 100.0 * M_PI * 2;
    100.0一定要加一个.0
    绘制第二个扇形
    一样的, 把路径描述第二个扇形就好了
    直接来个path =
    让Path指针重新指向一个新的对象.也就是把指针重复利用了
    之前的那个对象已经用完了,已经添加到了上下文当中了.

  • 第二个扇形

         startA = endA;
         angle = 25 / 100.0 * M_PI * 2;
         endA = startA + angle;
         path = [UIBezierPath bezierPathWithArcCenter:center
                                                 radius:radius 
                                                 startAngle:startA 
                                                 endAngle:endA 
                                                 clockwise:YES];
         [path addLineToPoint:center];
         把二个路径添加到上下文
         CGContextAddPath(ctx, path.CGPath);
         把上下文渲染到View
         CGContextFillPath(ctx);
 

添加第二个扇形之后, 发现它们的颜色都一样,想要修改它的颜色
在下面再写一个
[[UIColor greenColor] set];
下面的一个颜色把之前的东西给覆盖了.
解决办法, 让它渲染两次
第三个扇形,把第二个拷贝一下就好了

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