无法理解 CGPathAddArc

Posted

技术标签:

【中文标题】无法理解 CGPathAddArc【英文标题】:Having problem understanding CGPathAddArc 【发布时间】:2011-07-28 10:59:57 【问题描述】:

在 iPad 应用程序中,我想沿中心点为 (768, 512) 且半径为 512 的圆弧逆时针移动图层。我希望它从 12 点钟开始(即顶部屏幕右上角)并在 6 点钟(右下角)结束。

经过多次尝试和失败,我得到了代码工作

CGPoint origin = logo.layer.position;

CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = YES;

CGMutablePathRef curvedPath = CGPathCreateMutable();
CGPathMoveToPoint(curvedPath, NULL, origin.x, origin.y);
CGPathAddArc(curvedPath, NULL, 768, 512, 512, -M_PI_2, M_PI_2, YES);
pathAnimation.path = curvedPath;
CGPathRelease(curvedPath);
pathAnimation.duration = 2;
[logo.layer addAnimation:pathAnimation forKey:@"curve"];

但问题是我无法理解起始角度和结束角度参数。为什么要分别使用 -M_PI_2 和 M_PI_2 并将顺时针设置为 YES?

我想我将物体从 90 度逆时针移动到 270 度,因此代码应该是CGPathAddArc(curvedPath, NULL, 768, 512, 512, -M_PI_2, M_PI_2, YES);

我可能在多个地方都错了,偶然得到了正确的结果。

请指正,帮我理解这两个角度参数:

起始角度

The angle (in radians) from the horizontal that determines the starting point of the arc.

结束角度

The angle (in radians) from the horizontal that determines the ending point of the arc.

谢谢

狮子座

【问题讨论】:

【参考方案1】:

0的位置在X轴上,像这样:

    3*PI/2
      |
PI ---|--- 0
      |
     PI/2

-PI/2 等价于 3PI/2。

您实际上是在同一个地方开始轮换(-PI/2、3*PI/2、5*PI/2 等,都是相等的)

“12 点钟”,因为您认为它是 3*PI/2 或 -PI/2...,而您正在向下旋转到“6 点钟”,即 PI/2

【讨论】:

倒置的 y 轴让我感到困惑.. 另外,谢谢,它帮助了我 :)

以上是关于无法理解 CGPathAddArc的主要内容,如果未能解决你的问题,请参考以下文章

我无法理解这个迭代器

无法理解仪器数据

卷曲响应无法理解

ngAfterContentChecked() 无法理解 + 角度 2

无法理解为啥计算在没有手表的情况下无法工作

无法理解这些功能的使用