使用UIBezierPath绘制六边形

时间:2012-03-29 17:51:30

标签: iphone ios core-graphics uibezierpath

我正在使用UIBezierPath绘制六边形,其中点(或交点)变化&由滑块控制。 PLS。看这里的截图: http://postimage.org/image/tq8z8t9qb/

现在的问题是,当绘制最后一个点或移动时它已经错了(我在圈子中标记了截图 )。我想,它是从贝塞尔路径的原点/中心点画出一条额外的线。 希望你能查看代码:

- (void)drawRect:(CGRect)rect
{
   // Drawing code
   CGContextRef ctx = UIGraphicsGetCurrentContext();
   CGContextClearRect(ctx, rect);    
   CGPoint center = CGPointMake(150.0, 150.0);

   // line
   UIBezierPath *polyPath = [UIBezierPath bezierPath];
   polyPath.lineWidth = 5;
   [polyPath moveToPoint:CGPointMake(center.x, center.y + 60.0)];

   for (int i = 1; i <= 6; ++i) {
      CGFloat x, y;

      NSNumber *oNumb = [[self aIndexValues] objectAtIndex:i-1];
      fXValue_ = [oNumb floatValue];
      x = fXValue_ * sinf(i * 2.0 * M_PI / 6.0);
      y = fXValue_ * cosf(i * 2.0 * M_PI / 6.0);

      [polyPath addLineToPoint:CGPointMake(center.x + x, center.y + y)];
    }

    [polyPath closePath];
    [[UIColor redColor] setStroke];
    [polyPath stroke];

    // circle point
    for(int i = 1; i <= 6; ++i) {
       CGFloat x, y;
       NSNumber *oNumb = [[self aIndexValues] objectAtIndex:i-1];
       fXValue_ = [oNumb floatValue];            
       x = fXValue_ * sinf(i * 2.0 * M_PI / 6.0);
       y = fXValue_ * cosf(i * 2.0 * M_PI / 6.0);

       UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(center.x + x - 6, center.y + y - 6, 15, 15)];  
       circle.lineWidth = 5;
       [[UIColor whiteColor] setFill];
       [circle fill];
    }
 }

PLS。让我知道什么是错的。感谢

1 个答案:

答案 0 :(得分:0)

仔细看看:

[polyPath moveToPoint:CGPointMake(center.x, center.y + 60.0)];

这总是绘制到六边形的最大下顶点,忽略该顶点的滑块设置。它应该使用aIndexValues的approriate元素而不是60.0

其他一些不能防止这种情况发生的事情,但会让你的代码变得不整洁:

  1. 您无需在CGContextClearRect中致电drawRect。上下文已经为您清除。
  2. 您正在使用名为fXValue_的变量,该变量未在此方法中定义。你不需要从其他地方获取它的值,所以在这个方法中声明一个变量来存储顶点半径。
  3. 看看您是否能找到一种干净的方式来将i从0计算到5而不是1到6,因此每当您从1检索数字时,都必须减去aIndexValues