Skip to content

Commit 9b3376d

Browse files
committed
Merge pull request #219 from mutualmobile/appearance_forward_fix
Fixed an issue where you would get an unbalanced appearance state for the center view controller
2 parents a7969b2 + 2dfcb4b commit 9b3376d

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

MMDrawerController/MMDrawerController.m

+26-8
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,10 @@ -(void)openDrawerSide:(MMDrawerSide)drawerSide animated:(BOOL)animated velocity:
381381
//If animated is NO, then we need to handle all the appearance calls within this method. Otherwise,
382382
//let the method calling this one handle proper appearance methods since they will have more context
383383
-(void)setCenterViewController:(UIViewController *)centerViewController animated:(BOOL)animated{
384+
if ([self.centerViewController isEqual:centerViewController]) {
385+
return;
386+
}
387+
384388
if(_centerContainerView == nil){
385389
_centerContainerView = [[MMDrawerCenterContainerView alloc] initWithFrame:self.childControllerContainerView.bounds];
386390
[self.centerContainerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
@@ -424,16 +428,22 @@ -(void)setCenterViewController:(UIViewController *)newCenterViewController withC
424428
//If a side drawer isn't open, there is nothing to animate...
425429
animated = NO;
426430
}
431+
432+
BOOL forwardAppearanceMethodsToCenterViewController = ([self.centerViewController isEqual:newCenterViewController] == NO);
427433
[self setCenterViewController:newCenterViewController animated:animated];
428434

429435
if(animated){
430436
[self updateDrawerVisualStateForDrawerSide:self.openSide percentVisible:1.0];
431-
[self.centerViewController beginAppearanceTransition:YES animated:animated];
437+
if (forwardAppearanceMethodsToCenterViewController) {
438+
[self.centerViewController beginAppearanceTransition:YES animated:animated];
439+
}
432440
[self
433441
closeDrawerAnimated:animated
434442
completion:^(BOOL finished) {
435-
[self.centerViewController endAppearanceTransition];
436-
[self.centerViewController didMoveToParentViewController:self];
443+
if (forwardAppearanceMethodsToCenterViewController) {
444+
[self.centerViewController endAppearanceTransition];
445+
[self.centerViewController didMoveToParentViewController:self];
446+
}
437447
if(completion){
438448
completion(finished);
439449
}
@@ -450,6 +460,8 @@ -(void)setCenterViewController:(UIViewController *)newCenterViewController withF
450460
if(self.openSide != MMDrawerSideNone &&
451461
animated){
452462

463+
BOOL forwardAppearanceMethodsToCenterViewController = ([self.centerViewController isEqual:newCenterViewController] == NO);
464+
453465
UIViewController * sideDrawerViewController = [self sideDrawerViewControllerForSide:self.openSide];
454466

455467
CGFloat targetClosePoint = 0.0f;
@@ -468,7 +480,9 @@ -(void)setCenterViewController:(UIViewController *)newCenterViewController withF
468480
[self setAnimatingDrawer:animated];
469481

470482
UIViewController * oldCenterViewController = self.centerViewController;
471-
[oldCenterViewController beginAppearanceTransition:NO animated:animated];
483+
if(forwardAppearanceMethodsToCenterViewController ){
484+
[oldCenterViewController beginAppearanceTransition:NO animated:animated];
485+
}
472486
newCenterRect.origin.x = targetClosePoint;
473487
[UIView
474488
animateWithDuration:firstDuration
@@ -482,10 +496,12 @@ -(void)setCenterViewController:(UIViewController *)newCenterViewController withF
482496

483497
CGRect oldCenterRect = self.centerContainerView.frame;
484498
[self setCenterViewController:newCenterViewController animated:animated];
485-
[oldCenterViewController endAppearanceTransition];
486499
[self.centerContainerView setFrame:oldCenterRect];
487500
[self updateDrawerVisualStateForDrawerSide:self.openSide percentVisible:1.0];
488-
[self.centerViewController beginAppearanceTransition:YES animated:animated];
501+
if(forwardAppearanceMethodsToCenterViewController) {
502+
[oldCenterViewController endAppearanceTransition];
503+
[self.centerViewController beginAppearanceTransition:YES animated:animated];
504+
}
489505
[sideDrawerViewController beginAppearanceTransition:NO animated:animated];
490506
[UIView
491507
animateWithDuration:[self animationDurationForAnimationDistance:CGRectGetWidth(self.childControllerContainerView.bounds)]
@@ -496,8 +512,10 @@ -(void)setCenterViewController:(UIViewController *)newCenterViewController withF
496512
[self updateDrawerVisualStateForDrawerSide:self.openSide percentVisible:0.0];
497513
}
498514
completion:^(BOOL finished) {
499-
[self.centerViewController endAppearanceTransition];
500-
[self.centerViewController didMoveToParentViewController:self];
515+
if (forwardAppearanceMethodsToCenterViewController) {
516+
[self.centerViewController endAppearanceTransition];
517+
[self.centerViewController didMoveToParentViewController:self];
518+
}
501519
[sideDrawerViewController endAppearanceTransition];
502520
[self resetDrawerVisualStateForDrawerSide:self.openSide];
503521

0 commit comments

Comments
 (0)