Для достижения этого нам нужно использовать этот метод.
BezierSpline
код находится в C # для генерации массивов контрольных точек для безлинейного сплайна. Я преобразовал этот код в Objective C, и он прекрасно работает для меня.
Чтобы преобразовать код из C # в цель C.
понимать код C # построчно, даже если вы не знаете C #, вы должны знать C ++ / Java?
При конвертации:
Заменить используемую здесь структуру точек на CGPoint.
Замените массив точек на NSMutableArray и сохраните в нем значения NS, содержащие CGPoints.
Замените все двойные массивы на NSMutableArrays и сохраните в них двойное обтекание NSNumber.
использовать objectAtIndex: метод в случае индекса для доступа к элементам массива.
используйте replaceObjectAtIndex: withObject: для хранения объектов по определенному индексу.
Помните, что NSMutableArray является связным списком, а C # использует динамические массивы, поэтому у них уже есть существующие индексы.
В вашем случае, в NSMutableArray, если он пуст, вы не можете хранить объекты со случайными индексами, как это делает код C #.
они иногда в этом коде C # заполняют индекс 1 до индекса 0, и они могут сделать это, так как индекс 1 существует.
в NSMutabelArrays здесь, индекс 1 должен быть там, если вы хотите вызвать replaceObject для него.
поэтому перед сохранением чего-либо создайте метод, который добавит n объектов NSNull в NSMutableArray.
ТАКЖЕ:
хорошо, у этой логики есть статический метод, который будет принимать массив точек и давать вам два массива: -
массив первых контрольных точек.
массив вторых контрольных точек.
Эти массивы будут содержать первую и вторую контрольную точку для каждой кривой между двумя точками, которые вы проходите в первом массиве.
В моем случае у меня уже были все точки, и я мог провести через них кривую.
В случае, когда вы рисуете, вам понадобится несколько наборов точек, через которые вы хотите, чтобы плавная кривая проходила.
и обновите, вызвав setNeedsDisplay и нарисуйте сплайн, который является ничем иным, как UIBezierPath между двумя смежными точками в первом массиве.
и получение контрольных точек из обоих массивов контрольных точек по индексу.
Проблема в вашем случае заключается в том, что трудно понять, перемещая все критические точки, чтобы взять.
Что вы можете сделать, это:
Просто перемещая палец, продолжайте рисовать прямые линии между предыдущей и текущей точкой.
Линии будут настолько маленькими, что их не будет видно невооруженным глазом, так что они будут маленькими маленькими прямыми линиями, если не увеличить изображение.
UPDATE
Любой, кто заинтересован в реализации Objective C по ссылке выше, может обратиться к
это GitHub репо.
Я написал это некоторое время назад, и он не поддерживает ARC, но вы можете легко отредактировать его, удалить несколько вызовов релиза и автоматического выпуска и заставить его работать с ARC.
Этот генерирует только два массива контрольных точек для набора точек, к которым нужно присоединиться, используя сплайн Безье.