2016-07-12 17 views
4

ボタンを押したときにカウンターが増加するTextInputの横にボタンがあります。長押しでカウンターを連続的に増やす反応ネイティブ

<TouchableWithoutFeedback onPress={() => {this.increaseAmount(step, rowID)}}> 
     <View style={styles.amountPlusButtonContainer}> 
     <Text style={styles.amountButtonText}>+</Text> 
     </View> 
    </TouchableWithoutFeedback> 

私は現在、ボタンをタップするたびに1ずつ増加します。私が達成したいのは、ユーザーがそれを押している限り、カウンタを増やし続けることです。

私はsetInterval()を使用しようとしましたが、いつ停止するのか正確には分かりません。

答えて

1

Animated APIを使用して動作させることができました。 (公式ドキュメントに加えて)私が使用した基準は、私はそれがonPressInonPressOutと一緒に使用することはできませんので、onPressと同じ動作を維持するために3000msとMath.ceilを使用http://browniefed.com/blog/react-native-press-and-hold-button-actions/

var ACTION_TIMER = 3000; 
    var listenerActive = true; 

    getInitialState(){ 
    return{ 
     pressAction: new Animated.Value(0), 
     value: 0, 
    }; 
    }, 
    componentWillMount: function() { 
    this.state.pressAction.addListener((v) => this.setState({value: v.value})); 
    }, 
    handlePressIn: function() { 
    if(!listenerActive) { 
     this.state.pressAction.addListener((v) => this.setValueAndChangeAmount(v.value)); 
     listenerActive = true; 
    } 
    Animated.timing(this.state.pressAction, { 
     duration: ACTION_TIMER, 
     toValue: 67, 
    }).start(); 
    }, 
    handlePressOut: function() { 
    this.state.pressAction.removeAllListeners(); 
    this.setState({pressAction: new Animated.Value(Math.ceil(this.state.value))}); 
    listenerActive = false; 
    }, 

ました。

handlePressOutのリスナーを削除すると、カウンタが停止します。新しいpressActionthis.state.valueに設定すると、カウンタが停止した値にリセットされます。

3

私はsetIntervalを使用するといいと思います。 setIntervalonPressInとし、clearIntervalonPressOutとしてください。

+0

ちょうどそれを試みました。 onPressOutは呼び出されません。 – rikesan

+1

それは私のために働いた – ius

関連する問題