Подтвердить что ты не робот

Создание UIBezierPath больше похоже на NSBezierPath с элементами elementCount и elementAtIndex

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

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

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

4b9b3361

Ответ 1

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

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

Сообщите мне, как вам это нравится.

Ответ 2

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

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

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

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

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