React native 使用React本机手势处理程序检测滑动方向并重新激活

React native 使用React本机手势处理程序检测滑动方向并重新激活,react-native,react-native-reanimated,react-native-gesture-handler,React Native,React Native Reanimated,React Native Gesture Handler,我们已经使用React Native PanResponder开发了一个swiper(在有人评论之前)-我们不能在这里使用任何其他swiper库。在我们开发的swiper中,当用户结束swipe(意味着释放Pan)时,我们面临一个问题:启动spring动画时存在延迟 为了解决这个问题,我们正在尝试从解决用户所面临的滞后问题 但在与(PanGestureHandler)和 复活库,我们无法检测到在 手势处理程序 我正在添加我们用来在PanResponder中检测滑动方向的代码部分 onPanMov

我们已经使用React Native PanResponder开发了一个swiper(在有人评论之前)-我们不能在这里使用任何其他swiper库。在我们开发的swiper中,当用户结束swipe(意味着释放Pan)时,我们面临一个问题:启动spring动画时存在延迟

为了解决这个问题,我们正在尝试从解决用户所面临的滞后问题

但在与(PanGestureHandler)和 复活库,我们无法检测到在 手势处理程序

我正在添加我们用来在PanResponder中检测滑动方向的代码部分

onPanMoving = (evt, {dx}) => {
   this.draggedEnd = dx < -this.swipeThreshold; //You are moving towards right screen
   this.draggedStart = dx > this.swipeThreshold; //You are moving towards left screen
}
onPanMoving=(evt,{dx})=>{
this.draggedEnd=dx<-this.swipeThreshold;//您正在向右屏幕移动
this.draggedStart=dx>this.swipeThreshold;//您正在向左屏幕移动
}
如您所见,在PanResponder中,在平移移动时检测方向非常容易

手势处理程序的问题来了

当手势状态处于活动状态时,我无法检测到滑动

我已经在手势处理程序中搜索了问题,我发现了

该问题提出了两种解决办法

  • 第一个是有两个处理程序并检测 在两个处理程序的onHandlerStateChange中滑动方向 这在使用reanimated时没有帮助,因为它只设置滑动方向 当处理程序状态更改时
  • 第二个是通过它,当 状态为活动状态,但他使用translationX属性 translationX属性对我们来说也可能是负数,并且可以移入 任何一个方向类似于swiper
  • 这两种变通办法都不能解决我们的问题

    那么,有没有其他方法可以利用PanGestureHandler和Reanimated来找到方向呢。我尝试使用带有dx值的重新激活的PanResponder,但结果显示错误消息,即nativeEvent属性仅受支持,因为dx来自PanResponder的gestureState参数


    注意:我们不能使用,因为我们需要在仍在手柄上的状态变化中找到方向,而Swipeables不使用Reanimated。

    在我的例子中,我曾经检测过方向。这对我很有用。

    通过属性
    velocityX

    例如:

    const handleGesture = (evt) => {
        const { nativeEvent } = evt;
    
        if (nativeEvent.velocityX > 0) {
          console.log('Swipe right');
        } else {
          console.log('Swipe left');
        }
      };
    
    return (
       <PanGestureHandler onGestureEvent={handleGesture}>
           // child component
       </PanGestureHandler>
    );
    
    
    
    const handletesture=(evt)=>{
    const{nativeEvent}=evt;
    如果(nativeEvent.velocityX>0){
    console.log(“向右滑动”);
    }否则{
    console.log(“向左滑动”);
    }
    };
    返回(
    //子组件
    );
    
    *双重Flingesturehandler请注意,您始终可以找到您的答案。因此,没有必要使用注释来更新您的答案。