Как указывается начальная скорость UISpringTimingParameters?

Я пытаюсь выполнить пружинную анимацию в представлении, которое высвобождается жестом панорамирования пользователя и может иметь ненулевую скорость. По сути, я пытаюсь воссоздать анимацию этого видео WWDC где они используют UISpringTimingParameters(dampingRatio:initialVelocity:). Однако документация кажется противоречит самой себе:

скорость

Начальная скорость и направление анимации в виде единичного вектора.

[...]

Например, если общее расстояние анимации составляет 200 точек, а начальная скорость представления составляет 100 точек в секунду, укажите вектор с величиной 0.5.

Если 0.5 является примерным значением, то, по-видимому, ему не обязательно быть единичным вектором. И вообще невозможно закодировать скорость в единичном векторе.

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

Как использовать этот API?


person Tim Vermeulen    schedule 01.09.2017    source источник
comment
К вашему сведению, документация была значительно улучшена, чтобы лучше объяснить это: developer.apple.com /документация/uikit/   -  person smileyborg    schedule 04.02.2020


Ответы (1)


Хороший вопрос.

TL;DR: если вы пытаетесь анимировать что-то в позиции в 2D, вам нужно анимировать каждую координату отдельно, каждую с соответствующей скоростью x/y.

Если вы объедините их, взяв скалярную проекцию скорости на ваше смещение, вы получите странный артефакт, в котором предполагается контекст пролистывания вида по экрану, где цель находится в центре экрана, и вы пролистываете вид вверх с правой стороны, поскольку анимация должна вернуться к центру, а суммарная скорость удаляется от центра, анимация может только предположить, что объект движется по прямой линии от центра, и он будет зигзагообразным, чтобы вправо, прежде чем анимировать обратно в центр.

https://github.com/chrisco314/SpringAnimationTest

person Chris Conover    schedule 02.02.2018