使用UIBezierPath绘制六边形



我正在使用UIBezierPath绘制一个六边形,它的点(或交点)在其中变化&由滑块控制。请。请参阅此处的屏幕截图: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];
    }
 }

请。让我知道怎么了。感谢

仔细看看这里:

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

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

其他一些事情并不能阻止它的工作,但会让你的代码变得不整洁:

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

最新更新