From 664ef343090051049213eb5d56285e0432b4e2d7 Mon Sep 17 00:00:00 2001 From: Stanislav Doskalenko Date: Thu, 14 Feb 2019 12:21:48 +0200 Subject: [PATCH] Ignore pan gesture when no drawer is enabled (#4649) --- .../MMDrawerController/MMDrawerController.m | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/lib/ios/RNNSideMenu/MMDrawerController/MMDrawerController.m b/lib/ios/RNNSideMenu/MMDrawerController/MMDrawerController.m index 2c790ffd558..5670269f400 100755 --- a/lib/ios/RNNSideMenu/MMDrawerController/MMDrawerController.m +++ b/lib/ios/RNNSideMenu/MMDrawerController/MMDrawerController.m @@ -167,6 +167,7 @@ @interface MMDrawerController () { @property (nonatomic, copy) MMDrawerGestureCompletionBlock gestureStart; @property (nonatomic, copy) MMDrawerGestureCompletionBlock gestureCompletion; @property (nonatomic, assign, getter = isAnimatingDrawer) BOOL animatingDrawer; +@property (nonatomic, strong) UIGestureRecognizer *pan; @end @@ -875,6 +876,15 @@ -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOr } } +-(bool)hasPan +{ + for (UIGestureRecognizer *recognizer in self.view.gestureRecognizers) { + if(recognizer == _pan) { return YES; } + } + return NO; +} + + #pragma mark - Setters -(void)setRightDrawerViewController:(UIViewController *)rightDrawerViewController{ [self setDrawerViewController:rightDrawerViewController forSide:MMDrawerSideRight]; @@ -1014,6 +1024,18 @@ -(void)setAnimatingDrawer:(BOOL)animatingDrawer{ [self.view setUserInteractionEnabled:!animatingDrawer]; } +- (void)setLeftSideEnabled:(BOOL)leftSideEnabled +{ + _leftSideEnabled = leftSideEnabled; + [self updatePanHandlersState]; +} + +- (void)setRightSideEnabled:(BOOL)rightSideEnabled +{ + _rightSideEnabled = rightSideEnabled; + [self updatePanHandlersState]; +} + #pragma mark - Getters -(CGFloat)maximumLeftDrawerWidth{ if(self.leftDrawerViewController){ @@ -1184,6 +1206,15 @@ -(void)panGestureCallback:(UIPanGestureRecognizer *)panGesture{ } } +- (void)updatePanHandlersState +{ + if(_leftSideEnabled == NO && _rightSideEnabled == NO) { + if([self hasPan]) { [self.view removeGestureRecognizer:_pan]; } + } else { + if(![self hasPan]) { [self.view addGestureRecognizer:_pan]; } + } +} + #pragma mark - iOS 7 Status Bar Helpers -(UIViewController*)childViewControllerForStatusBarStyle{ return [self childViewControllerForSide:self.openSide]; @@ -1343,9 +1374,9 @@ static inline CGFloat originXForDrawerOriginAndTargetOriginOffset(CGFloat origin #pragma mark - Helpers -(void)setupGestureRecognizers{ - UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureCallback:)]; - [pan setDelegate:self]; - [self.view addGestureRecognizer:pan]; + _pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureCallback:)]; + [_pan setDelegate:self]; + [self.view addGestureRecognizer:_pan]; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureCallback:)]; [tap setDelegate:self];