#react-native #animation
#react-native #Анимация
Вопрос:
Я пытаюсь создать два родственных вида, меняющих там высоту. Когда мы перетаскиваем представление, его высота должна увеличиваться, а другая высота должна уменьшаться и наоборот. Для этого я использую pan responder, но любой другой подход также будет отличным. Проблема в том, что когда я перетаскиваю, а затем обрабатываю, представление перемещается вверх или вниз, но его высота не меняется. Аналогично, другой вид также не меняет свою высоту.
const pan = useRef(new Animated.ValueXY()).current;
const panResponder = useRef(
PanResponder.create({
onMoveShouldSetPanResponder: () => true,
onPanResponderGrant: () => {
pan.setOffset({
x: pan.x._value,
y: pan.y._value
});
},
onPanResponderMove: Animated.event(
[
null,
{ dx: pan.x, dy: pan.y }
], { useNativeDriver: false }
),
onPanResponderRelease: () => {
pan.flattenOffset();
}
})
).current;
return <SafeAreaView style={{ flex: 1 }} forceInset={{ top: 'never', bottom: 'never' }}>
<Animated.View style={[{ backgroundColor: 'yellow', flex: 1 }]}>
</Animated.View>
<Animated.View style={[{
height: 100,
backgroundColor: 'skyblue'
}, {
transform: [{ translateY: pan.y }]
}]}>
<Animated.View style={[{ justifyContent: 'center', alignItems: 'center', paddingVertical: 5, backgroundColor: '#f0f3f7' }]}
{...panResponder.panHandlers}
>
<Block flex={false} color='#ccc' radius={10} style={{ height: 5, width: 35 }} />
</Animated.View>
</Animated.View>
</SafeAreaView>