Как изменить порядок точек CGPath - PullRequest
2 голосов
/ 07 октября 2011

Я хочу нарисовать круг с перфорированной буквой.чтобы сделать это, мне нужно обвести кружок по часовой стрелке и букву против часовой стрелки.

Это все хорошо и хорошо, но когда я получаю путь к букве с помощью Core Text, я не могу понять, как по существу повернуть вспятьдорожка.НЕ ЗЕРКАЛО или ВРАЩАЕТСЯ или что-нибудь ... это достаточно просто.Я хочу, чтобы порядок точечных обводок был против часовой стрелки.

это действительно весело.У меня было слишком много визуальных ошибок «от одного».

Ответы [ 3 ]

2 голосов
/ 10 июня 2014

Я знаю, что этот вопрос так же стара, как грязь, но недавно мне нужно было изменить CGPath. Нет абсолютно никаких примеров того, как это сделать, и мне нужно было, чтобы это работало как на Mac, так и на iOS, поэтому использование -bezierPathByReversingPath не могло быть и речи.

Итак, вот код для изменения CGPath. Это работает как с открытыми путями, так и с закрытыми. Он обрабатывает сложные пути, а также простые пути. Он также обрабатывает контуры с кубическими элементами Безье, квадратичными элементами Безье и линиями. Я не могу опубликовать код, потому что на самом деле это пара простых классов, поэтому мне пришлось сжать их.

В прилагаемом Zip-файле есть два класса C ++. Один класс CCGPathReverse, другой класс CCGPathIterator класс, который очень похож на класс * GDI + GraphicsPathIterator (он используется классом CCGPathReverse.)

Вот ссылка на занятия .

Чтобы использовать его, просто включите заголовок CGPathReverse.h и назовите его так:

CGMutablePathRef myPath = CGPathCreateMutable();
CGPathAddRect(myPath, NULL, CGRectMake(0,0,200,200));
CCGPathReverse r(myPath);
CGPathRelease(myPath);
myPath = r.GetReversedPathMutableCopy();
//
// myPath is now a counter-clockwise rectangle, do what you want with it...
//
CGPathRelease(myPath);

Я надеюсь, что это кому-то поможет, потому что изменение CGPath не тривиально!

2 голосов
/ 07 октября 2011

Все, что я могу придумать, это вызвать CGPathApply на пути и сохранить информацию обо всех точках, а затем перерисовать путь в противоположном направлении. Не забудьте позвонить CGPathCloseSubpath, когда вы закончите.

1 голос
/ 10 февраля 2013

В iOS 6 появилась -bezierPathByReversingPath Сначала были некоторые проблемы, но, похоже, это ответ на этот вопрос.

...