Как я могу анимировать UIBezierPath с CAAnimate, чтобы рисовать отрезки с одинаковой скоростью? - PullRequest
0 голосов
/ 27 мая 2019

Я хочу перерисовать линию, нарисованную Apple Pencil. Как можно установить одинаковую скорость анимации от одной точки на пути к следующей, даже если эти точки разнесены на разные длины? Это сделано для того, чтобы сохранить естественный поток письма, а не сделать его как нарисованный роботом.

Допустим, строка выглядит следующим образом:

о ---- о - о -------- о

где «о» - это точки, а «-» - это линия между ними. Он рисуется так же, как этот UIBezierPath:

о ---------------- о

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

Я попробовал обычную CABasicAnimation и ту, которая с легкостью входила и выходила. Но это не сохраняет естественного и личного движения человеческого почерка.

let layer = CAShapeLayer()
layer.path = myPath

let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.fromValue = 0.0
animation.toValue = 1.0
animation.duration = 2

layer.add(animation, forKey: "drawLineAnimation")

Ожидается способ установить время анимации каждого сегмента на одно и то же, но UIBezierPath игнорирует количество точек в сегменте и онлайн использует длину для синхронизации.

...