1

我正在使用 UIBezierPath 绘制一个六边形,其中它的点(或交叉点)变化并由滑块控制。请。在此处查看屏幕截图:http: //postimage.org/image/tq8z8t9qb/

现在的问题是,当最后一个点被绘制或移动时,它已经是错误的了(我已将屏幕截图标记为 circle )。我认为,它从贝塞尔路径的原点/中心点画了一条额外的线。希望您可以检查代码:

- (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];
    }
 }

请。让我知道出了什么问题。谢谢

4

1 回答 1

0

仔细看看这里:

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

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

其他一些不会阻止此工作,但会使您的代码不整洁的事情:

  1. 你不需要打电话CGContextClearRectdrawRect上下文已经为您清除了。
  2. 您正在使用一个名为 的变量fXValue_,该变量未在此方法中定义。您不需要来自其他地方的值,因此在此方法中声明一个变量来存储顶点半径。
  3. 看看你是否能找到一种i从 0 到 5 而不是从 1 到 6 计数的干净方法,所以1当你从aIndexValues.
于 2012-04-11T06:52:13.587 回答