ToValue всегда 1, запустится только не более 1 раза если не занулять значение animation и зачем отдельно интерполировать increase и decrease? надо чтоб у тебя было одно значение, которое в дальнейшем изменяется от 0 до 1, тоесть есть timing на 0 .. 1 и есть тайминг на 1 .. 0 и по одному интерполятору для каждого из анимируемых свойств, которые будут изменяться при изменении animated
Тоесть если правильно кейс понял - тебе надо при открытии клавы запустить тайминг toValue 1, при закрытии toValue 0
Оставить функции которые именованы с increase, убрать те которые decrease (или наоборот) и убрать тернарное из стилей
const [keyboardVisible, setKeyboardVisible] = useState(false); const animation = useValue(0); useEffect(() => { Animated.timing(animation, { toValue: keyboardVisible ? 0 : 1, duration: 5000, useNativeDriver: false, }) }, [keyboardVisible]); const interpolateLogo = interpolate(animation, { inputRange: [0, 1], outputRange: ['30%', '45%'], }); const interpolateText = interpolate(animation, { inputRange: [0, 1], outputRange: [30, 45], }); const animatedLogoStyle = { width: interpolateLogo }; const animatedTextStyle = { width: interpolateText } Ну или так если функциональный компонент
Обсуждают сегодня