Делаем UIBezierPath более похожим на NSBezierPath с elementCount и elementAtIndex - PullRequest
22 голосов
/ 06 июля 2011

При перемещении некоторого кода Какао в Cocoa Touch я был разочарован, обнаружив, что в UIBezierPath отсутствуют методы «Доступ к элементам пути»:

– elementCount
– elementAtIndex:
– elementAtIndex:associatedPoints:
– removeAllPoints
– setAssociatedPoints:atIndex:

Единственный способ получить доступ к этим элементам в Cocoa Touch, по-видимому, - через CGPathApply. Прежде чем я попытался воссоздать это как подкласс или категорию UIBezierPath, мне было интересно, если это уже было сделано. У кого-нибудь есть идея, если что-то подобное уже доступно?

Ответы [ 2 ]

1 голос
/ 06 августа 2014

Я сделал порт на https://github.com/seivan/UIBezierPathPort, но это с Swift. Имеет набор тестов и документацию. Работает с бета-версии 5.

Технически, вы должны иметь возможность использовать Swift в проекте Obj-C.

Дай мне знать, как тебе это нравится.

1 голос
/ 10 ноября 2011

Я столкнулся с той же проблемой пару месяцев назад и тогда не мог найти ничего легкодоступного.(По правде говоря, поскольку путь CGPathApply был не так уж плох для моих нужд, честно говоря, я не выглядел очень усердно).

Функция applier вызывается для каждого CGPathElementCGPath, такой элемент состоит из CGPathElementType и массива C CGPoints.

Поскольку CGPathElementType - это перечисление только с пятью различными значениями

enum CGPathElementType {
   kCGPathElementMoveToPoint,
   kCGPathElementAddLineToPoint,
   kCGPathElementAddQuadCurveToPoint,
   kCGPathElementAddCurveToPoint,
   kCGPathElementCloseSubpath
};

Вам не нужно писать столько кода, чтобы выполнять (контролировать) манипуляции с точками / проверять пути.Хотя иметь такой же интерфейс было бы неплохо.

...