私は(クランプと補間を使用して)アニメーションの値を同時に制限しようとしていますが、それらを使用できるように補間から値を取得しようとしています。具体的には、国家の一部を更新し、そこからオブザーバブルを作成したいからです。補間(この場合はstate.panValue)によって生成されたAnimatedValueから '実際の'値を抽出する方法を知ることはできません。私はアニメーション - アニメーション値を実際の値に補間する方法
this.state.panValue.value
と
this.state.panValue._value
を試みたし、彼らは未定義として戻ってきます。もし誰かが私を助けることができれば素晴らしいだろう!
編集:私は状態変数「panValue」の事を更新し、全体をスキップすることができますのでは私もちょうど限度内で更新
this.state.pan.x
変数を持っていることは本当に幸せになると思います。 Facebook上の素敵な人は、変数を関数や何かに切り替えることで、何とかこの制限をonPanResponderMoveの中に実装できると示唆しましたが、いくつかのことを試しましたが、エラーはあります。これらのアニメーション化された価値を '安全に'修正する。
onPanResponderMove: Animated.event([
null,
{ dx: this.state.pan.x },
]),
オリジナルコード:
import React, { Component } from 'react';
import {
View,
Animated,
PanResponder,
Text,
} from 'react-native';
import styles from './styles';
class ClockInSwitch extends Component {
constructor(props) {
super(props);
this.state = {
pan: new Animated.ValueXY(),
panValue: 0,
};
}
componentWillMount() {
this._animatedValueX = 0;
this._animatedValueY = 0;
this.state.pan.x.addListener((value) => {
this._animatedValueX = value.value;
this.setState({
panValue: this.state.pan.x.interpolate({
inputRange: [-30, 0, 120,],
outputRange: [-10, 0, 120,],
extrapolate: 'clamp',
}),
});
});
this._panResponder = PanResponder.create({
// Ask to be the responder:
onStartShouldSetPanResponder: (evt, gestureState) => true,
onStartShouldSetPanResponderCapture: (evt, gestureState) => true,
onMoveShouldSetPanResponder: (evt, gestureState) => true,
onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,
onPanResponderGrant: (evt, gestureState) => {
this.state.pan.setOffset({
x: this._animatedValueX,
});
this.state.pan.setValue({ x: 0, y: 0 });
},
onPanResponderMove: Animated.event([
null,
{ dx: this.state.pan.x },
]),
onPanResponderTerminationRequest: (evt, gestureState) => true,
onPanResponderRelease: (evt, gestureState) => {
this.state.pan.flattenOffset();
Animated.timing(this.state.pan, {
toValue: 0,
duration: 500,
}).start();
},
onPanResponderTerminate: (evt, gestureState) => {
},
onShouldBlockNativeResponder: (evt, gestureState) => {
return true;
},
});
}
componentWillUnMount() {
this.state.pan.x.removeAllListeners();
}
render() {
const animatedStyle = {
transform: [{
translateX: this.state.panValue,
},
],
};
return (
<View>
<Text>{this.state.pan.x._value}</Text>
<View style={styles.buttonStyle}>
<Animated.View
style={[styles.sliderButtonStyle, animatedStyle]}
{...this._panResponder.panHandlers}
/>
</View>
</View>
);
}
}
export default ClockInSwitch;
おかげでたくさんの多くを明確アメージング! –