Skip to content

Commit 1091a01

Browse files
authored
Fix ManualGestureHandler shouldCancelWhenOutside on iOS (#2274)
## Description This PR adds changes in `ManualGestureHandler` on iOS. It should now properly react to `shouldCancelWhenOutside` prop. This PR should solve part of #2265 issue. ## Test plan Tested on example app
1 parent 234ec68 commit 1091a01

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

ios/Handlers/RNManualHandler.m

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
@interface RNManualRecognizer : UIGestureRecognizer
44

5-
- (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
5+
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
66

77
@end
88

@@ -24,7 +24,7 @@ - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
2424
{
2525
[super touchesBegan:touches withEvent:event];
2626
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
27-
27+
2828
if (_shouldSendBeginEvent) {
2929
[_gestureHandler handleGesture:self];
3030
_shouldSendBeginEvent = NO;
@@ -35,6 +35,14 @@ - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
3535
{
3636
[super touchesMoved:touches withEvent:event];
3737
[_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
38+
39+
if ([self shouldFail]) {
40+
self.state = (self.state == UIGestureRecognizerStatePossible)
41+
? UIGestureRecognizerStateFailed
42+
: UIGestureRecognizerStateCancelled;
43+
44+
[self reset];
45+
}
3846
}
3947

4048
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
@@ -53,21 +61,29 @@ - (void)reset
5361
{
5462
[_gestureHandler.pointerTracker reset];
5563
[super reset];
56-
64+
5765
_shouldSendBeginEvent = YES;
5866
}
5967

68+
- (BOOL)shouldFail
69+
{
70+
if (_gestureHandler.shouldCancelWhenOutside && ![_gestureHandler containsPointInView]) {
71+
return YES;
72+
} else {
73+
return NO;
74+
}
75+
}
76+
6077
@end
6178

6279
@implementation RNManualGestureHandler
6380

6481
- (instancetype)initWithTag:(NSNumber *)tag
6582
{
66-
if ((self = [super initWithTag:tag])) {
67-
_recognizer = [[RNManualRecognizer alloc] initWithGestureHandler:self];
68-
69-
}
70-
return self;
83+
if ((self = [super initWithTag:tag])) {
84+
_recognizer = [[RNManualRecognizer alloc] initWithGestureHandler:self];
85+
}
86+
return self;
7187
}
7288

7389
@end

0 commit comments

Comments
 (0)