Как я могу анимировать UIBezierPath с CAAnimate, чтобы рисовать отрезки с одинаковой скоростью?

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

0 ответов

Другие вопросы по тегам