Проблемы с пониманием CGPathAddArc - PullRequest
11 голосов
/ 28 июля 2011

В приложении для 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);

Возможно, я ошибался в нескольких местах и ​​случайно получил правильный результат.

Пожалуйста, исправьте меня и помогите мне понять два угловых параметра:

StartAngle

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

endAngle

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

Спасибо

Leo

1 Ответ

18 голосов
/ 08 марта 2012

Расположение 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

...