diff --git a/packages/react-native-gesture-handler/src/handlers/gestures/GestureDetector/useAnimatedGesture.ts b/packages/react-native-gesture-handler/src/handlers/gestures/GestureDetector/useAnimatedGesture.ts index c1cce09307..60a9d1677e 100644 --- a/packages/react-native-gesture-handler/src/handlers/gestures/GestureDetector/useAnimatedGesture.ts +++ b/packages/react-native-gesture-handler/src/handlers/gestures/GestureDetector/useAnimatedGesture.ts @@ -163,7 +163,10 @@ export function useAnimatedGesture( runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false); } } else if (isTouchEvent(event)) { - if (!stateControllers[i]) { + if ( + !stateControllers[i] || + stateControllers[i].handlerTag !== event.handlerTag + ) { stateControllers[i] = GestureStateManager.create(event.handlerTag); } diff --git a/packages/react-native-gesture-handler/src/handlers/gestures/gestureStateManager.ts b/packages/react-native-gesture-handler/src/handlers/gestures/gestureStateManager.ts index 2f77095b56..113306f75e 100644 --- a/packages/react-native-gesture-handler/src/handlers/gestures/gestureStateManager.ts +++ b/packages/react-native-gesture-handler/src/handlers/gestures/gestureStateManager.ts @@ -7,6 +7,8 @@ export interface GestureStateManagerType { activate: () => void; fail: () => void; end: () => void; + /** @internal */ + handlerTag: number; } const warningMessage = tagMessage( @@ -21,6 +23,8 @@ const setGestureState = Reanimated?.setGestureState; function create(handlerTag: number): GestureStateManagerType { 'worklet'; return { + handlerTag, + begin: () => { 'worklet'; if (REANIMATED_AVAILABLE) { diff --git a/packages/react-native-gesture-handler/src/handlers/gestures/gestureStateManager.web.ts b/packages/react-native-gesture-handler/src/handlers/gestures/gestureStateManager.web.ts index 358228ebaf..e45da69822 100644 --- a/packages/react-native-gesture-handler/src/handlers/gestures/gestureStateManager.web.ts +++ b/packages/react-native-gesture-handler/src/handlers/gestures/gestureStateManager.web.ts @@ -4,6 +4,8 @@ import { GestureStateManagerType } from './gestureStateManager'; export const GestureStateManager = { create(handlerTag: number): GestureStateManagerType { return { + handlerTag, + begin: () => { NodeManager.getHandler(handlerTag).begin(); },