iOS 绘制饼图代码

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用


绘制饼图的原理很简单,首先绘制扇形,然后在中央添加一个圆形View,计算每个部分所占角度就是用每部分的比例*360就是该部分所占的角度。绘制扇形的主要方法:

CGContextAddArc(CGContextRef __nullable c, CGFloat x, CGFloat y,
    CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)

计算角度的主要代码:

CGFloat degree=(count/allCount)*(360.f-2*self.dataSource.count);

角度转弧度主要代码:

staticinlinefloat radians(double degrees) { return degrees *  M_PI/ 180.f;
}

主要代码如下:

- (void)drawRect:(CGRect)rect {
  CGContextRef context=UIGraphicsGetCurrentContext();
  //设置半径
  CGFloat radius=130.f;
  if (self.circularRingRadius==0) {
    self.circularRingRadius=54.f;
  }
  CGFloat intRadius=radius-self.circularRingRadius;
  //设置圆心的坐标
  CGFloat centerX=self.bounds.size.width/2.f;
  CGFloat centerY=self.bounds.size.height/2.f;
  //设置起始角度
  CGFloat pieStart=90.f;
  //设置旋转方向
  int clockwise=0; //1: 顺时针 ; 0:逆时针
  //画扇形
  if(allCount == 0){  //无资产
    CGContextSetFillColorWithColor(context, [HEXCOLOR(0xefeff4) CGColor]);
    CGContextMoveToPoint(context, centerX, centerY);
    CGContextAddArc(context, centerX, centerY, radius,radians(0), radians(360), clockwise);
    CGContextClosePath(context);
    CGContextFillPath(context);
  }else{
    for (int i=0; i<self.degreeArray.count; i++) {
      CGFloat end=pieStart+[self.degreeArray[i] doubleValue];
      if (self.isShowSeperate) {
        if(i%2==0){  //分割线
          UIColor *fillColor=self.colorArray[(int)(i/2)];
          CGContextSetFillColorWithColor(context, [fillColor CGColor]);
        }else{
          CGContextSetFillColorWithColor(context, [HEXCOLOR(0xefeff4) CGColor]);
        }
      }else{
        CGContextSetFillColorWithColor(context, [self.colorArray[i] CGColor]);
      }
      NSLog(@"%f",radians(end));
      CGContextMoveToPoint(context, centerX, centerY);
      CGContextAddArc(context, centerX, centerY, radius,radians(pieStart), radians(end), clockwise);
      CGContextClosePath(context);
      CGContextFillPath(context);
      pieStart+=[self.degreeArray[i] doubleValue];
    }
  }
  //画内圆
  CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]);
  CGContextMoveToPoint(context, centerX, centerY);
  CGContextAddArc(context, centerX, centerY, intRadius, 0, radians(360.f), 0);
  CGContextClosePath(context);
  CGContextFillPath(context);
}

原文  http://www.lvesli.com/?p=339

标签: 代码

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:Java实现敏感词过滤代码

下一篇:Java实现zip解压缩目录中的所有文件