Использование SCNActionTimingModeEaseInEaseOut

Для примера SCNActionмы можем указать свойство timingMode, Мы можем указать это как SCNActionTimingModeEaseInEaseOut, Не кажется, что этого достаточно, чтобы это работало, мы также должны указать timingFunction (право?). Как будет выглядеть этот блок хронирования? Большинство примеров функций синхронизации имеют 4 параметра; эта функция имеет только одну, которая является временем.

1 ответ

Решение

Функция синхронизации и режим синхронизации вместе определяют фактическую временную кривую анимации действия.

  • Если вы просто хотите выбрать линейное, упрощенное, упрощенное или упрощенное время, установите timingMode собственность и оставить timingFunction один (установите его на nil).

  • Вы устанавливаете режим и функцию только в том случае, если хотите настроить временную кривую за пределами этих четырех параметров. Когда вы делаете это, режим определяет кривую для входа в timingFunction,

Это немного проще объяснить графически... вот кривые анимации, которые вы получаете с Linear а также EaseInEaseOut режимы синхронизации, и нет функции синхронизации: линейная временная криваякривая легкость в легкости

Теперь предположим, что вам нужно квадратичное время, когда прогресс анимации пропорционален квадрату времени (отлично подходит для симуляции гравитации). Вы можете сделать это, поддерживая линейный режим синхронизации и устанавливая функцию синхронизации на блок / закрытие, которое возвращает time * time: квадратная линейная временная кривая

С этой комбинацией ваша функция синхронизации получает вход, который изменяется линейно с течением времени. Если вы установите режим синхронизации на что-то другое, то вход для вашей функции синхронизации не будет линейным. Вот так же time * time функция, когда режим синхронизации EaseInEaseOut: квадрат легкости в кривой легкости

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