Применение модификаторов¶
Другим способом настройки анимации в Reanimated является использование модификаторов анимации. Reanimated поставляется с тремя встроенными модификаторами: withRepeat, withSequence и withDelay.
Давайте построим простую анимацию тряски, в которой используются все модификаторы, и попутно изучим их. Поехали!
Начальная точка¶
В этом примере мы создадим анимированный бокс, который будет трястись при нажатии кнопки с небольшой задержкой.
Начнем с того, что у нас есть Animated.View и Button, которая перемещает вид вправо при нажатии. Для этого мы можем использовать useAnimatedStyle и функцию withTiming, чтобы плавно анимировать наш бокс на 40px вправо.
Если для вас это звучит ново, не беспокойтесь! Начните с изучения основ в разделе [Your First Animation] (your-first-animation.md) и вернитесь сюда, когда будете готовы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | |
Повторение анимации¶
Для реализации желаемой анимации встряхивания мы можем использовать модификатор withRepeat. Этот модификатор позволяет повторить заданную анимацию.
1 2 3 4 5 6 | |
Передайте число во второй параметр функции, чтобы она повторялась заданное количество раз. Можно сделать так, чтобы анимация повторялась вечно, передав неположительное значение (например, 0 или -1). Анимацию можно заставить повторяться вперед-назад, передав третьему аргументу true (т.е. reverse).
Подробнее об этом можно узнать из полного справочника withRepeat API.
Используем эту функцию в нашем примере:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | |
Запустив этот код, мы видим, что коробка покачивается влево-вправо между заданным смещением и начальной позицией. После завершения анимации коробка не возвращается в исходное положение. Это не совсем то, как мы представляли себе анимацию тряски, но мы к этому еще вернемся!
Последовательный запуск анимации¶
Один из способов улучшить нашу анимацию - запустить ее со смещением влево и вернуть в исходное положение после окончания анимации. Это идеальный вариант использования модификатора withSequence.
1 2 3 4 5 6 | |
Этот модификатор позволяет объединять анимации в цепочки. Следующая анимация запускается после завершения предыдущей. Его можно использовать, передавая анимации в качестве аргументов в том порядке, в котором вы хотите их запустить.
Подробнее об этом можно узнать из полного справочника withSequence API.
Вернемся к нашему примеру - мы можем использовать withSequence для улучшения нашей анимации. Сначала мы качнем коробку влево, что займет половину времени одного качания. Затем встряхнем коробку 5 раз и завершим анимацию, вернув ее в исходное положение также за половину длительности анимации.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | |
Запуск анимации с задержкой¶
В качестве вишенки мы добавим немного напряженности, добавив небольшую задержку перед началом анимации. Именно для этого в Reanimated предусмотрен модификатор withDelay.
1 2 3 4 5 6 | |
Эта функция в качестве первого параметра принимает длительность в миллисекундах до начала анимации. Второй параметр задает задержку анимации.
Более подробно об этом можно узнать из полного справочника withDelay API.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | |
Резюме¶
В этом разделе мы научились создавать сложные анимации с помощью модификаторов анимации. Подведем итоги:
- Reanimated поставляется с тремя встроенными модификаторами анимации -
withRepeat,withSequenceиwithDelay. withRepeatпозволяет повторять анимацию заданное количество раз или запускать ее бесконечно.withSequenceпозволяет запускать анимацию последовательно.withDelayпозволяет запускать анимацию с задержкой.
Что дальше?¶
В следующем разделе мы узнаем о работе с жестами Tap и Pan. Также мы познакомимся с функцией анимации withDecay.