diff --git a/packages/react-native-gesture-handler/apple/RNGestureHandler.mm b/packages/react-native-gesture-handler/apple/RNGestureHandler.mm index fc4452ab3a..3d26f798e8 100644 --- a/packages/react-native-gesture-handler/apple/RNGestureHandler.mm +++ b/packages/react-native-gesture-handler/apple/RNGestureHandler.mm @@ -640,14 +640,14 @@ + (RNGestureHandler *)findGestureHandlerByRecognizer:(UIGestureRecognizer *)reco // We may try to extract "DummyGestureHandler" in case when "otherGestureRecognizer" belongs to // a native view being wrapped with "NativeViewGestureHandler" RNGHUIView *reactView = recognizer.view; - while (reactView != nil && reactView.reactTag == nil) { - reactView = reactView.superview; - } - - for (UIGestureRecognizer *recognizer in reactView.gestureRecognizers) { - if ([recognizer isKindOfClass:[RNDummyGestureRecognizer class]]) { - return recognizer.gestureHandler; + while (reactView != nil) { + for (UIGestureRecognizer *recognizer in reactView.gestureRecognizers) { + if ([recognizer isKindOfClass:[RNDummyGestureRecognizer class]]) { + return recognizer.gestureHandler; + } } + + reactView = reactView.superview; } return nil; @@ -816,7 +816,8 @@ - (BOOL)wantsToHandleEventsAtPoint:(CGPoint)point RNGHUIView *viewToHitTest = _recognizer.view; - if ([self usesNativeOrVirtualDetector] && [_recognizer.view.subviews count] > 0) { + if ([self usesNativeOrVirtualDetector] && [_recognizer.view.subviews count] > 0 && + _recognizer.view == self.hostDetectorView) { viewToHitTest = _recognizer.view.subviews[0]; point = [_recognizer.view convertPoint:point toView:viewToHitTest]; } diff --git a/packages/react-native-gesture-handler/apple/RNGestureHandlerButton.mm b/packages/react-native-gesture-handler/apple/RNGestureHandlerButton.mm index f4f1b5b0d2..77e0cd1e8f 100644 --- a/packages/react-native-gesture-handler/apple/RNGestureHandlerButton.mm +++ b/packages/react-native-gesture-handler/apple/RNGestureHandlerButton.mm @@ -850,7 +850,7 @@ - (BOOL)shouldHandleTouch:(RNGHUIView *)view atPoint:(CGPoint)point for (UIGestureRecognizer *recognizer in enabledGestureRecognizers) { RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:recognizer]; if (handler != nil) { - CGPoint pointInView = [self convertPoint:point toView:view]; + CGPoint pointInView = [self convertPoint:point toView:handler.recognizer.view]; gestureRecognizerWantsEvent = [handler wantsToHandleEventsAtPoint:pointInView]; } else { gestureRecognizerWantsEvent = YES;