Skip to content

Commit 9c9834b

Browse files
committed
Improve code for drawer pan start
1 parent 588bd1d commit 9c9834b

File tree

1 file changed

+26
-37
lines changed

1 file changed

+26
-37
lines changed

lib/ios/RNNSideMenu/MMDrawerController/MMDrawerController.m

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,6 @@ - (void)closeDrawerInOverlayMode:(UIViewController *)sideDrawerViewController
371371
completion:(void (^)(BOOL finished))completion {
372372
CGFloat maximumDrawerWidth = [self maximumDrawerWidthForSide:visibleSide];
373373

374-
// Prepare drawer frames
375374
CGRect currentFrame = sideDrawerViewController.view.frame;
376375
CGRect finalFrame = currentFrame;
377376

@@ -397,23 +396,15 @@ - (void)closeDrawerInOverlayMode:(UIViewController *)sideDrawerViewController
397396
options:options
398397
animations:^{
399398
[self setNeedsStatusBarAppearanceUpdateIfSupported];
400-
401-
// Move drawer off-screen
402399
[sideDrawerViewController.view setFrame:finalFrame];
403-
404-
// Fade out overlay
405400
self.centerContentOverlay.alpha = 0.0;
406-
407-
// Update visual state
408401
[self updateDrawerVisualStateForDrawerSide:visibleSide percentVisible:0.0];
409402
}
410403
completion:^(BOOL finished) {
411404
[self completeDrawerClosingForSide:visibleSide
412405
sideDrawerViewController:sideDrawerViewController
413406
finished:finished
414407
completion:completion];
415-
416-
// Remove overlay
417408
[self.centerContentOverlay removeFromSuperview];
418409
}];
419410
}
@@ -450,11 +441,8 @@ - (void)completeDrawerClosingForSide:(MMDrawerSide)visibleSide
450441
sideDrawerViewController:(UIViewController *)sideDrawerViewController
451442
finished:(BOOL)finished
452443
completion:(void (^)(BOOL finished))completion {
453-
454-
// Complete appearance transition
455444
[sideDrawerViewController endAppearanceTransition];
456445

457-
// Update state
458446
[self setOpenSide:MMDrawerSideNone];
459447
[self resetDrawerVisualStateForDrawerSide:visibleSide];
460448
[self setAnimatingDrawer:NO];
@@ -496,7 +484,6 @@ - (void)openDrawerSide:(MMDrawerSide)drawerSide
496484
}
497485

498486
if (sideDrawerViewController) {
499-
// Check if this drawer should use overlay mode
500487
MMDrawerOpenMode openMode = [self drawerOpenModeForSide:drawerSide];
501488

502489
if (openMode == MMDrawerOpenModeAboveContent) {
@@ -1378,12 +1365,10 @@ - (void)tapGestureCallback:(UITapGestureRecognizer *)tapGesture {
13781365
- (void)panGestureCallback:(UIPanGestureRecognizer *)panGesture {
13791366
switch (panGesture.state) {
13801367
case UIGestureRecognizerStateBegan: {
1381-
// Call gesture start callback
13821368
if (self.gestureStart) {
13831369
self.gestureStart(self, panGesture);
13841370
}
13851371

1386-
// Don't proceed if drawer is currently animating
13871372
if (self.animatingDrawer) {
13881373
[panGesture setEnabled:NO];
13891374
break;
@@ -1394,10 +1379,8 @@ - (void)panGestureCallback:(UIPanGestureRecognizer *)panGesture {
13941379
MMDrawerSide drawerSide = self.openSide;
13951380

13961381
if (drawerSide == MMDrawerSideNone) {
1397-
// Determine based on gesture direction
13981382
drawerSide = (velocity.x > 0) ? MMDrawerSideLeft : MMDrawerSideRight;
13991383

1400-
// Check if the side is enabled
14011384
if ((drawerSide == MMDrawerSideLeft && !_leftSideEnabled) ||
14021385
(drawerSide == MMDrawerSideRight && !_rightSideEnabled)) {
14031386
drawerSide = (drawerSide == MMDrawerSideLeft) ? MMDrawerSideRight : MMDrawerSideLeft;
@@ -1409,45 +1392,34 @@ - (void)panGestureCallback:(UIPanGestureRecognizer *)panGesture {
14091392
}
14101393
}
14111394

1412-
// Store which drawer we're working with for this gesture
1395+
// Remember which drawer we're working with for this gesture
14131396
self.startingDrawerSide = drawerSide;
14141397

14151398
MMDrawerOpenMode openMode = [self drawerOpenModeForSide:drawerSide];
14161399

14171400
if (openMode == MMDrawerOpenModeAboveContent) {
1418-
// OVERLAY MODE
1419-
UIViewController *drawerViewController = [self sideDrawerViewControllerForSide:drawerSide];
1420-
CGFloat maximumDrawerWidth = [self maximumDrawerWidthForSide:drawerSide];
1401+
UIViewController *drawerViewController =
1402+
[self sideDrawerViewControllerForSide:drawerSide];
14211403

14221404
// Store current drawer frame
14231405
self.startingPanRect = drawerViewController.view.frame;
14241406

14251407
// If drawer is closed, set up initial position
14261408
if (self.openSide == MMDrawerSideNone) {
1427-
CGRect drawerFrame = drawerViewController.view.frame;
1428-
1429-
// Set proper width
1430-
drawerFrame.size.width = maximumDrawerWidth;
1431-
1432-
// Position off-screen based on side
1433-
if (drawerSide == MMDrawerSideLeft) {
1434-
drawerFrame.origin.x = -maximumDrawerWidth;
1435-
} else { // MMDrawerSideRight
1436-
drawerFrame.origin.x = self.view.bounds.size.width;
1437-
}
1409+
self.startingPanRect =
1410+
[self calculateClosedDrawerPanStartFrameInOverlay:drawerSide
1411+
drawerViewController:(UIViewController *)
1412+
drawerViewController];
14381413

14391414
// Apply initial frame
1440-
[drawerViewController.view setFrame:drawerFrame];
1415+
[drawerViewController.view setFrame:self.startingPanRect];
14411416

14421417
// Ensure drawer is visible and in front
14431418
drawerViewController.view.hidden = NO;
14441419
[self.childControllerContainerView bringSubviewToFront:drawerViewController.view];
1445-
1446-
// Update starting rect
1447-
self.startingPanRect = drawerFrame;
14481420
}
14491421
} else {
1450-
// Original push mode - get center container position as starting point
1422+
// Get center container position as starting point
14511423
self.startingPanRect = self.centerContainerView.frame;
14521424
}
14531425

@@ -1713,6 +1685,23 @@ - (void)panGestureCallback:(UIPanGestureRecognizer *)panGesture {
17131685
}
17141686
}
17151687

1688+
- (CGRect)calculateClosedDrawerPanStartFrameInOverlay:(MMDrawerSide)drawerSide
1689+
drawerViewController:(UIViewController *)drawerViewController {
1690+
CGRect drawerFrame = drawerViewController.view.frame;
1691+
CGFloat maximumDrawerWidth = [self maximumDrawerWidthForSide:drawerSide];
1692+
1693+
// Set proper width
1694+
drawerFrame.size.width = maximumDrawerWidth;
1695+
1696+
// Position off-screen based on side
1697+
if (drawerSide == MMDrawerSideLeft) {
1698+
drawerFrame.origin.x = -maximumDrawerWidth;
1699+
} else { // MMDrawerSideRight
1700+
drawerFrame.origin.x = self.view.bounds.size.width;
1701+
}
1702+
return drawerFrame;
1703+
}
1704+
17161705
- (void)updatePanHandlersState {
17171706
if (_leftSideEnabled == NO && _rightSideEnabled == NO) {
17181707
if ([self hasPan]) {

0 commit comments

Comments
 (0)