Нулевая степень при рисовании сегмента - PullRequest
1 голос
/ 02 ноября 2010

При рисовании сегмента дуги с использованием Core Graphics я заметил, что нулевой угол - это не то, чего я ожидал, поэтому для рисования дуги сегмента, как на рисунке, я использовал 330 и 210 в качестве начальных и конечных значений.

CGContextSetFillColorWithColor(ctx, [[UIColor grayColor] CGColor]);
CGContextMoveToPoint(ctx, 300, 300);
CGContextAddArc(ctx, 300, 300, 300,  radians(330), radians(210), 1);
CGContextClosePath(ctx);
CGContextFillPath(ctx); 

Может ли кто-нибудь пролить свет на происхождение этих чисел? Я действительно ожидал бы что-то вроде 300 и 60 ... Может ли это быть связано с вращением оси для iPhone?

alt text

1 Ответ

1 голос
/ 02 ноября 2010

Я думаю, возможно, путаница заключается в том, что Mac OS X использует координаты миллиметровки (так, начало координат слева внизу, положительное x справа, положительное y вверх), но iOS использует английские координаты порядка чтения (источник сверхуслева положительный х все еще прав, но положительный у вниз).Поскольку CoreGraphics работает одинаково на обеих платформах с точки зрения координат, если вы выполняете в iOS те же самые команды, что и в OS X, тогда ваша графика будет выглядеть перевернутой.Вот почему вы часто видите что-то вроде:

CGAffineTransform newTransform = CGAffineTransformMakeTranslation(0.0f, self.frame.size.height);
newTransform = CGAffineTransformScale(newTransform, 1.0f, -1.0f);

В верхней части пользовательского UIView drawRect: или drawLayer: inContext: (хотя вы, вероятно, должны получить информацию о размерах от CALayer во втором случае, чтобы быть уверенным вбыть потокобезопасным, в зависимости от того, почему вы решили перехватить drawLayer: inContext: в первую очередь).

Поэтому я думаю, что CGContextAddArc делает то, что, как вы думаете, делает - начинается с положительной оси x, а затем измеренияпротив часовой стрелки от этого (например, в соответствии с полярными координатами) - но то, что вы видите, является неправильным путем для триггера Apple на начальных векторах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...