@@ -371,7 +371,6 @@ - (void)closeDrawerInOverlayMode:(UIViewController *)sideDrawerViewController
371
371
completion : (void (^)(BOOL finished))completion {
372
372
CGFloat maximumDrawerWidth = [self maximumDrawerWidthForSide: visibleSide];
373
373
374
- // Prepare drawer frames
375
374
CGRect currentFrame = sideDrawerViewController.view .frame ;
376
375
CGRect finalFrame = currentFrame;
377
376
@@ -397,23 +396,15 @@ - (void)closeDrawerInOverlayMode:(UIViewController *)sideDrawerViewController
397
396
options: options
398
397
animations: ^{
399
398
[self setNeedsStatusBarAppearanceUpdateIfSupported ];
400
-
401
- // Move drawer off-screen
402
399
[sideDrawerViewController.view setFrame: finalFrame];
403
-
404
- // Fade out overlay
405
400
self.centerContentOverlay .alpha = 0.0 ;
406
-
407
- // Update visual state
408
401
[self updateDrawerVisualStateForDrawerSide: visibleSide percentVisible: 0.0 ];
409
402
}
410
403
completion: ^(BOOL finished) {
411
404
[self completeDrawerClosingForSide: visibleSide
412
405
sideDrawerViewController: sideDrawerViewController
413
406
finished: finished
414
407
completion: completion];
415
-
416
- // Remove overlay
417
408
[self .centerContentOverlay removeFromSuperview ];
418
409
}];
419
410
}
@@ -450,11 +441,8 @@ - (void)completeDrawerClosingForSide:(MMDrawerSide)visibleSide
450
441
sideDrawerViewController : (UIViewController *)sideDrawerViewController
451
442
finished : (BOOL )finished
452
443
completion : (void (^)(BOOL finished))completion {
453
-
454
- // Complete appearance transition
455
444
[sideDrawerViewController endAppearanceTransition ];
456
445
457
- // Update state
458
446
[self setOpenSide: MMDrawerSideNone];
459
447
[self resetDrawerVisualStateForDrawerSide: visibleSide];
460
448
[self setAnimatingDrawer: NO ];
@@ -496,7 +484,6 @@ - (void)openDrawerSide:(MMDrawerSide)drawerSide
496
484
}
497
485
498
486
if (sideDrawerViewController) {
499
- // Check if this drawer should use overlay mode
500
487
MMDrawerOpenMode openMode = [self drawerOpenModeForSide: drawerSide];
501
488
502
489
if (openMode == MMDrawerOpenModeAboveContent) {
@@ -1378,12 +1365,10 @@ - (void)tapGestureCallback:(UITapGestureRecognizer *)tapGesture {
1378
1365
- (void )panGestureCallback : (UIPanGestureRecognizer *)panGesture {
1379
1366
switch (panGesture.state ) {
1380
1367
case UIGestureRecognizerStateBegan: {
1381
- // Call gesture start callback
1382
1368
if (self.gestureStart ) {
1383
1369
self.gestureStart (self, panGesture);
1384
1370
}
1385
1371
1386
- // Don't proceed if drawer is currently animating
1387
1372
if (self.animatingDrawer ) {
1388
1373
[panGesture setEnabled: NO ];
1389
1374
break ;
@@ -1394,10 +1379,8 @@ - (void)panGestureCallback:(UIPanGestureRecognizer *)panGesture {
1394
1379
MMDrawerSide drawerSide = self.openSide ;
1395
1380
1396
1381
if (drawerSide == MMDrawerSideNone) {
1397
- // Determine based on gesture direction
1398
1382
drawerSide = (velocity.x > 0 ) ? MMDrawerSideLeft : MMDrawerSideRight;
1399
1383
1400
- // Check if the side is enabled
1401
1384
if ((drawerSide == MMDrawerSideLeft && !_leftSideEnabled) ||
1402
1385
(drawerSide == MMDrawerSideRight && !_rightSideEnabled)) {
1403
1386
drawerSide = (drawerSide == MMDrawerSideLeft) ? MMDrawerSideRight : MMDrawerSideLeft;
@@ -1409,45 +1392,34 @@ - (void)panGestureCallback:(UIPanGestureRecognizer *)panGesture {
1409
1392
}
1410
1393
}
1411
1394
1412
- // Store which drawer we're working with for this gesture
1395
+ // Remember which drawer we're working with for this gesture
1413
1396
self.startingDrawerSide = drawerSide;
1414
1397
1415
1398
MMDrawerOpenMode openMode = [self drawerOpenModeForSide: drawerSide];
1416
1399
1417
1400
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];
1421
1403
1422
1404
// Store current drawer frame
1423
1405
self.startingPanRect = drawerViewController.view .frame ;
1424
1406
1425
1407
// If drawer is closed, set up initial position
1426
1408
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];
1438
1413
1439
1414
// Apply initial frame
1440
- [drawerViewController.view setFrame: drawerFrame ];
1415
+ [drawerViewController.view setFrame: self .startingPanRect ];
1441
1416
1442
1417
// Ensure drawer is visible and in front
1443
1418
drawerViewController.view .hidden = NO ;
1444
1419
[self .childControllerContainerView bringSubviewToFront: drawerViewController.view];
1445
-
1446
- // Update starting rect
1447
- self.startingPanRect = drawerFrame;
1448
1420
}
1449
1421
} else {
1450
- // Original push mode - get center container position as starting point
1422
+ // Get center container position as starting point
1451
1423
self.startingPanRect = self.centerContainerView .frame ;
1452
1424
}
1453
1425
@@ -1713,6 +1685,23 @@ - (void)panGestureCallback:(UIPanGestureRecognizer *)panGesture {
1713
1685
}
1714
1686
}
1715
1687
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
+
1716
1705
- (void )updatePanHandlersState {
1717
1706
if (_leftSideEnabled == NO && _rightSideEnabled == NO ) {
1718
1707
if ([self hasPan ]) {
0 commit comments