2017-11-30 6 views
0

나는 TouchableOpacity 하위의 부모 PanResponder을 보유하고 있습니다. PanResponder이 클릭을 처리하기 때문에 TouchableOpacity이 클릭에 응답하지 않습니다. 이 내 코드입니다 http://browniefed.com/blog/react-native-maintain-touchable-items-with-a-parent-panresponder/TouchableOpacity with 부모 PanResponder

: 나는이 가이드하지만 성공을 따르도록 노력했다

this._panResponder = PanResponder.create({ 
      onStartShouldSetPanResponder: (evt, gestureState) => true, 
      onStartShouldSetPanResponderCapture: (evt, gestureState) => false, 
      onMoveShouldSetResponderCapture:() => true, 
      onMoveShouldSetPanResponder: (evt, gestureState) => true, 
      onMoveShouldSetPanResponderCapture: (evt, gestureState) => { 
       return gestureState.dx != 0 && gestureState.dy != 0; 
      }, 
      onPanResponderGrant: (evt, gestureState) => { 
       let isFirst = gestureState.y0 > 164 ? false : true; 
       this.setState({animObj: isFirst, isUsingCurtain: true}); 
      }, 
      onPanResponderMove: (evt, gestureState) => { 

       //let Y = this.state.animObj ? gestureState.moveY - this.state.currentHeaderHeight : gestureState.moveY - this.state.currentHeaderHeight ;// - this.state.currentHeaderHeight; 
       let Y = gestureState.moveY - this.state.currentHeaderHeight + 20 
       if (Y < 0) { 
        return false 
       } 
       this.state.animCurtain.setValue(Y); 
       gestureState.moveY > height/2 ? this.setState({curtainOnMiddle: true}) : this.setState({curtainOnMiddle: false}) 
      }, 
      onPanResponderTerminationRequest: (evt, gestureState) => true, 
      onPanResponderRelease: (evt, gestureState) => { 
       if (((height/2) > gestureState.moveY)) {//slide back up1 
        this._CurtainAnimation(0, false); 
       } else {//slide to bottom 
        let val = height - calcSize(180); 
        this._CurtainAnimation(val, true); 
       } 
      }, 
      onPanResponderTerminate: (evt, gestureState) => { 
      }, 
      onPanResponderStart: (e, gestureState) => { 
      }, 
     }); 

을이 내보기입니다 :

<Animated.View 
      style={[styles.bottomHPHeader, TopArroOpacity ? {opacity: TopArroOpacity} : ""]} {...this._panResponder.panHandlers}> 
      <TouchableOpacity onPress={() => this._animateAutoCurtain()}> 
       {this.state.curtainOnMiddle ? 
        <AIIcon image={require('../../../../assets/images/homepage/close_drawer_arrow.png')} 
          boxSize={30}/> 
        : <AIIcon image={require('../../../../assets/images/homepage/open_drawer_arrow.png')} 
           boxSize={30}/>} 
      </TouchableOpacity></Animated.View> 

당신에게

답변

0

감사 내 경우에 대한 해결책은 수정하는 것이었다 onMoveShouldSetPanResponder

onMoveShouldSetPanResponder: (evt, gestureState) => { 
    //return true if user is swiping, return false if it's a single click 
       return !(gestureState.dx === 0 && gestureState.dy === 0)     
}