Использование SCNActionTimingModeEaseInEaseOut
Для примера SCNAction
мы можем указать свойство timingMode
, Мы можем указать это как SCNActionTimingModeEaseInEaseOut
, Не кажется, что этого достаточно, чтобы это работало, мы также должны указать timingFunction
(право?). Как будет выглядеть этот блок хронирования? Большинство примеров функций синхронизации имеют 4 параметра; эта функция имеет только одну, которая является временем.
1 ответ
Функция синхронизации и режим синхронизации вместе определяют фактическую временную кривую анимации действия.
Если вы просто хотите выбрать линейное, упрощенное, упрощенное или упрощенное время, установите
timingMode
собственность и оставитьtimingFunction
один (установите его наnil
).Вы устанавливаете режим и функцию только в том случае, если хотите настроить временную кривую за пределами этих четырех параметров. Когда вы делаете это, режим определяет кривую для входа в
timingFunction
,
Это немного проще объяснить графически... вот кривые анимации, которые вы получаете с Linear
а также EaseInEaseOut
режимы синхронизации, и нет функции синхронизации:
Теперь предположим, что вам нужно квадратичное время, когда прогресс анимации пропорционален квадрату времени (отлично подходит для симуляции гравитации). Вы можете сделать это, поддерживая линейный режим синхронизации и устанавливая функцию синхронизации на блок / закрытие, которое возвращает time * time
:
С этой комбинацией ваша функция синхронизации получает вход, который изменяется линейно с течением времени. Если вы установите режим синхронизации на что-то другое, то вход для вашей функции синхронизации не будет линейным. Вот так же time * time
функция, когда режим синхронизации EaseInEaseOut
: