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