Я анимировал свойство ширины и левого вида представления (оба%). Я получаю ошибку превышения размера стека вызовов по любой причине. Я не думаю, что я вызываю функцию более одного раза.
Просмотр:
<Animated.View
style={StyleSheet.compose(styles.activeSlider, {
width: this.state.width.interpolate({
inputRange: [40, 60],
outputRange: ["40%", "60%"]
}),
left: this.state.posLeft.interpolate({
inputRange: [0, 40],
outputRange: ["0%", "40%"]
})
})}
/>
сенсорная функция вызывается из другого представления с помощью onPress
touch() {
this.setState({
isLeftEnabled: !this.state.isLeftEnabled
});
this.updatePosition();
Vibration.vibrate(CONSTANTS.BUTTON_VIBRATE_LENGTH); // static var set to 40
}
updatePosition
updatePosition() {
let w = Animated.timing(this.state.width, {
toValue: (this.state.isLeftEnabled) ? 40 : 60,
duration: CONSTANTS.ANIMATION_SPEED,
easing: Easing.inOut
});
let p = Animated.timing(this.state.posLeft, {
toValue: (this.state.isLeftEnabled) ? 0 : 40,
duration: CONSTANTS.ANIMATION_SPEED,
easing: Easing.inOut
});
w.start();
p.start();
}
Состояние:
this.state = {
isLeftEnabled: true,
posLeft: new Animated.Value(40),
width: new Animated.Value(60)
}