Skip to content

Commit 1fbdbcc

Browse files
authored
[iOS] Fix Animated events with no native driver (#3841)
## Description I noticed that on iOS, Animated Events with no native driver weren't working. This was caused by the fact that Animated events were only sent using the old pipeline, so that NativeAnimatedModule would intercept them. However, when not using the native driver, the event handler is just a JS function, which was effectively ignored. ## Test plan Checked the `NativeDetector` screen with the `useNativeDriver` set to `false`.
1 parent 7feb18d commit 1fbdbcc

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

packages/react-native-gesture-handler/apple/RNGestureHandlerDetector.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ NS_ASSUME_NONNULL_BEGIN
1818

1919
- (void)dispatchGestureEvent:(RNGestureHandlerDetectorEventEmitter::OnGestureHandlerEvent)event;
2020

21+
- (void)dispatchAnimatedGestureEvent:(RNGestureHandlerDetectorEventEmitter::OnGestureHandlerEvent)event;
22+
2123
- (void)dispatchTouchEvent:(RNGestureHandlerDetectorEventEmitter::OnGestureHandlerTouchEvent)event;
2224

2325
- (void)dispatchReanimatedStateChangeEvent:

packages/react-native-gesture-handler/apple/RNGestureHandlerDetector.mm

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,17 @@ - (void)dispatchGestureEvent:(RNGestureHandlerDetectorEventEmitter::OnGestureHan
9292
}
9393
}
9494

95+
- (void)dispatchAnimatedGestureEvent:(RNGestureHandlerDetectorEventEmitter::OnGestureHandlerEvent)event
96+
{
97+
if (_eventEmitter != nullptr) {
98+
std::dynamic_pointer_cast<const RNGestureHandlerDetectorEventEmitter>(_eventEmitter)->onGestureHandlerAnimatedEvent({
99+
.state = event.state,
100+
.handlerTag = event.handlerTag,
101+
.handlerData = event.handlerData,
102+
});
103+
}
104+
}
105+
95106
- (void)dispatchTouchEvent:(RNGestureHandlerDetectorEventEmitter::OnGestureHandlerTouchEvent)event
96107
{
97108
if (_eventEmitter != nullptr) {

packages/react-native-gesture-handler/apple/RNGestureHandlerManager.mm

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -464,18 +464,21 @@ - (void)sendNativeOrVirtualEvent:(RNGestureHandlerStateChange *)event
464464
forView:(RNGHUIView *)detectorView
465465
{
466466
if ([event isKindOfClass:[RNGestureHandlerEvent class]]) {
467+
RNGestureHandlerEvent *gestureEvent = (RNGestureHandlerEvent *)event;
468+
467469
switch (eventHandlerType) {
468-
case RNGestureHandlerEventHandlerTypeAnimated:
470+
case RNGestureHandlerEventHandlerTypeAnimated: {
469471
[self sendEventForNativeAnimatedEvent:event];
472+
auto nativeEvent = [gestureEvent getNativeEvent];
473+
[(RNGestureHandlerDetector *)detectorView dispatchAnimatedGestureEvent:nativeEvent];
470474
break;
475+
}
471476
case RNGestureHandlerEventHandlerTypeReanimated: {
472-
RNGestureHandlerEvent *gestureEvent = (RNGestureHandlerEvent *)event;
473477
auto nativeEvent = [gestureEvent getReanimatedNativeEvent];
474478
[(RNGestureHandlerDetector *)detectorView dispatchReanimatedGestureEvent:nativeEvent];
475479
break;
476480
}
477481
case RNGestureHandlerEventHandlerTypeJS: {
478-
RNGestureHandlerEvent *gestureEvent = (RNGestureHandlerEvent *)event;
479482
auto nativeEvent = [gestureEvent getNativeEvent];
480483
[(RNGestureHandlerDetector *)detectorView dispatchGestureEvent:nativeEvent];
481484
break;

0 commit comments

Comments
 (0)