6

我试图弄清楚如何在 CoreGraphics 中绘制弧线。我了解在以下场景中调用哪种方法以及如何计算角度。

----------
|        |
*--------*

当点都在矩形的底部时。但是,当两点在其他位置时,我不知道如何计算正确的角度。

---------*
|        |
*---------

请参阅我的图像的底部。

在此处输入图像描述

Ray Wenderlich 有一个很棒的教程,关于仅在第一次提到的点位置创建弧线。

// sample code for creating arc for path from bottom of rect
CGMutablePathRef createArcPathFromBottomOfRect(CGRect rect, CGFloat arcHeight) {
  CGRect arcRect = CGRectMake(rect.origin.x, rect.origin.y + rect.size.height
    - arcHeight, rect.size.width, arcHeight);
  CGFloat arcRadius = (arcRect.size.height/2) + (pow(arcRect.size.width, 2) /
    (8 * arcRect.size.height));
  CGPoint arcCenter = CGPointMake(arcRect.origin.x + arc.size.width/2,
    arcRect.origin.y + arcRadius);
  CGFloat angle = acos(arcRect.size.width/ (2*arcRadius));
  CGFloat startAngle = radians(180) + angle;
  CGFloat endAngle = radians(360) - angle;
  CGMutablePathRef path = CGPathCreateMutable();
  CGPathAddArc(path, NULL, arcCenter.x, arcCenter.y, arcRadius, startAngle,
    endAngle, 0);
  return path;
}

在图像底部所示的其他情况下,如何计算角度?

4

2 回答 2

8

我发现制作弧线的更简单方法是使用:

void CGContextAddArcToPoint (
   CGContextRef c,
   CGFloat x1,
   CGFloat y1,
   CGFloat x2,
   CGFloat y2,
   CGFloat radius
);

如果您从 Ray Wenderlich 的网站 ( https://www.raywenderlich.com/33330/core-graphics-tutorial-glossy-buttons )查看这张图片,点 (x1,y1) 是曲线和点 ( x2,y2) 是您的终点。然后只需指定角半径,瞧!看起来这可能是一个更容易用于您想要做的事情的 API。

于 2012-07-07T23:29:27.757 回答
0

您至少需要 3 个点来确定一个圆。

在您的第一个场景中,两个点位于矩形的底部,当 arcHeight 已知时,顶部中间点隐含地是第三个点。所以三个点决定了圆,从而决定了弧。因此可以计算所有角度等。

但是,在您的第二个场景中,没有定义第三点。因此,您可以绘制通过具有不同曲率的两个点的无限数量的弧。您将需要额外的要求来修复弧。例如半径或第三个点应该是圆弧之一。

于 2012-07-09T08:47:46.027 回答