Как нарисовать круг, начиная сверху

Я работаю с некоторым примером кода, который рисует дугу, используя CGPaths. Я осмотрелся и нашел документацию, но я просто не могу себе представить, что происходит с точки зрения использования MoveToPoint, AddLineToPoint и т. Д. Я не могу "увидеть", что делает код, я могу просто увидеть результат.

Например, приведенный ниже код рисует дугу на 360 градусов, начиная с позиции 3 часа. Что касается моей жизни, я не могу понять, как заставить ее начинать с позиции 12 часов с фактическим поворотом обзора - на 90 градусов.

Может ли кто-нибудь помочь мне разобраться в этом коде и в том, как я изменил бы его, чтобы он начинался с 12 часов, предпочтительно пытаясь объяснить, как все это работает. Или, может быть, указать мне на визуальный ресурс онлайн?

- (void)drawPathWithArc:(CGFloat)arc {
    CGMutablePathRef thePath = CGPathCreateMutable();
    CGPathMoveToPoint(thePath, NULL, 100.f, 100.f);
    CGPathAddLineToPoint(thePath, NULL, 200.f, 100.f);
    CGPathAddArc(thePath, NULL, 100.f, 100.f, 100.f, 0.f, (360* M_PI)/180, NO);
    CGPathCloseSubpath(thePath);
    shapeLayer_.path = thePath;
    CGPathRelease(thePath);
}

1 ответ

Решение

Пути действительно не так сложно понять визуально. По сути, все пути - это линия, соединяющая две точки на декартовой плоскости, которая определяет экран iphone.

Когда вы перемещаете ToPoint, он устанавливает текущую точку пути в указанную точку.

Когда вы добавляете LineToPoint, он рисует прямую линию от текущей точки до указанной точки.

Когда вы добавляете CurveToPoint, он рисует кривую линию от текущей точки до указанной точки на основе определенных касательных и контрольных точек.

И так далее. Я бы рекомендовал прочитать документацию на CGPaths, чтобы лучше понять, что делает каждая функция.

http://developer.apple.com/library/mac/#documentation/graphicsimaging/Reference/CGPath/Reference/reference.html


Если ваш вопрос касается начала с 12 вместо 3, просто прочитайте документацию по функции CGPathAddArc.

Что вам нужно сделать, это изменить свой текущий код:

CGPathAddArc(thePath, NULL, 100.f, 100.f, 100.f, 0.f, (360* M_PI)/180, NO);

чтобы:

CGPathAddArc(thePath, NULL, 100.f, 100.f, 100.f, -M_PI_2, M_PI_2*3, NO);

Все, что это делает, - это изменение начального угла на -90 градусов (все углы измеряются в радианах от горизонтали) и конечного угла на 270 градусов.


Надеюсь это поможет. Ура,

Брентон.

Другие вопросы по тегам