Как нарисовать круг, начиная сверху - PullRequest
7 голосов
/ 03 марта 2011

Я работаю с некоторым примером кода, который рисует дугу, используя 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 Ответ

16 голосов
/ 03 марта 2011

Пути действительно не так сложно понять визуально. По сути, все пути - это линия, соединяющая две точки на декартовой плоскости, которая определяет экран 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 градусов.


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

Брентон.

...