diff --git a/MMDrawerController/MMDrawerController.m b/MMDrawerController/MMDrawerController.m index 593785fa..c536962f 100644 --- a/MMDrawerController/MMDrawerController.m +++ b/MMDrawerController/MMDrawerController.m @@ -94,7 +94,7 @@ -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UINavigationBar * navBar = [self navigationBarContainedWithinSubviewsOfView:self]; CGRect navBarFrame = [navBar convertRect:navBar.bounds toView:self]; if((self.centerInteractionMode == MMDrawerOpenCenterInteractionModeNavigationBarOnly && - CGRectContainsPoint(navBarFrame, point) == NO) || + CGRectContainsPoint(navBarFrame, point) == NO) || self.centerInteractionMode == MMDrawerOpenCenterInteractionModeNone){ hitView = nil; } @@ -130,7 +130,6 @@ @interface MMDrawerController () { @property (nonatomic, strong) UIView * childControllerContainerView; @property (nonatomic, strong) MMDrawerCenterContainerView * centerContainerView; -@property (nonatomic, strong) UIView * dummyStatusBarView; @property (nonatomic, assign) CGRect startingPanRect; @property (nonatomic, copy) MMDrawerControllerDrawerVisualStateBlock drawerVisualState; @@ -199,36 +198,36 @@ - (void)encodeRestorableStateWithCoder:(NSCoder *)coder{ if (self.leftDrawerViewController){ [coder encodeObject:self.leftDrawerViewController forKey:MMDrawerLeftDrawerKey]; } - + if (self.rightDrawerViewController){ [coder encodeObject:self.rightDrawerViewController forKey:MMDrawerRightDrawerKey]; } - + if (self.centerViewController){ [coder encodeObject:self.centerViewController forKey:MMDrawerCenterKey]; } - + [coder encodeInteger:self.openSide forKey:MMDrawerOpenSideKey]; } - (void)decodeRestorableStateWithCoder:(NSCoder *)coder{ UIViewController *controller; MMDrawerSide openside; - + [super decodeRestorableStateWithCoder:coder]; if ((controller = [coder decodeObjectForKey:MMDrawerLeftDrawerKey])){ self.leftDrawerViewController = [coder decodeObjectForKey:MMDrawerLeftDrawerKey]; } - + if ((controller = [coder decodeObjectForKey:MMDrawerRightDrawerKey])){ self.rightDrawerViewController = controller; } - + if ((controller = [coder decodeObjectForKey:MMDrawerCenterKey])){ self.centerViewController = controller; } - + if ((openside = [coder decodeIntegerForKey:MMDrawerOpenSideKey])){ [self openDrawerSide:openside animated:false completion:nil]; } @@ -241,11 +240,11 @@ -(void)toggleDrawerSide:(MMDrawerSide)drawerSide animated:(BOOL)animated complet } else { if((drawerSide == MMDrawerSideLeft && - self.openSide == MMDrawerSideLeft) || + self.openSide == MMDrawerSideLeft) || (drawerSide == MMDrawerSideRight && - self.openSide == MMDrawerSideRight)){ - [self closeDrawerAnimated:animated completion:completion]; - } + self.openSide == MMDrawerSideRight)){ + [self closeDrawerAnimated:animated completion:completion]; + } else if(completion){ completion(NO); } @@ -473,7 +472,7 @@ -(void)setCenterViewController:(UIViewController *)newCenterViewController withF [sideDrawerViewController.view setFrame:self.childControllerContainerView.bounds]; } completion:^(BOOL finished) { - + CGRect oldCenterRect = self.centerContainerView.frame; [self setCenterViewController:newCenterViewController animated:animated]; [oldCenterViewController endAppearanceTransition]; @@ -481,28 +480,28 @@ -(void)setCenterViewController:(UIViewController *)newCenterViewController withF [self updateDrawerVisualStateForDrawerSide:self.openSide percentVisible:1.0]; [self.centerViewController beginAppearanceTransition:YES animated:animated]; [sideDrawerViewController beginAppearanceTransition:NO animated:animated]; - [UIView - animateWithDuration:[self animationDurationForAnimationDistance:CGRectGetWidth(self.childControllerContainerView.bounds)] - delay:MMDrawerDefaultFullAnimationDelay - options:UIViewAnimationOptionCurveEaseInOut - animations:^{ - [self.centerContainerView setFrame:self.childControllerContainerView.bounds]; - [self updateDrawerVisualStateForDrawerSide:self.openSide percentVisible:0.0]; - } - completion:^(BOOL finished) { - [self.centerViewController endAppearanceTransition]; - [self.centerViewController didMoveToParentViewController:self]; - [sideDrawerViewController endAppearanceTransition]; - [self resetDrawerVisualStateForDrawerSide:self.openSide]; - - [sideDrawerViewController.view setFrame:sideDrawerViewController.mm_visibleDrawerFrame]; - - [self setOpenSide:MMDrawerSideNone]; - - if(completion){ - completion(finished); - } - }]; + [UIView + animateWithDuration:[self animationDurationForAnimationDistance:CGRectGetWidth(self.childControllerContainerView.bounds)] + delay:MMDrawerDefaultFullAnimationDelay + options:UIViewAnimationOptionCurveEaseInOut + animations:^{ + [self.centerContainerView setFrame:self.childControllerContainerView.bounds]; + [self updateDrawerVisualStateForDrawerSide:self.openSide percentVisible:0.0]; + } + completion:^(BOOL finished) { + [self.centerViewController endAppearanceTransition]; + [self.centerViewController didMoveToParentViewController:self]; + [sideDrawerViewController endAppearanceTransition]; + [self resetDrawerVisualStateForDrawerSide:self.openSide]; + + [sideDrawerViewController.view setFrame:sideDrawerViewController.mm_visibleDrawerFrame]; + + [self setOpenSide:MMDrawerSideNone]; + + if(completion){ + completion(finished); + } + }]; }]; } else { @@ -641,9 +640,9 @@ -(BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers{ - (void)viewDidLoad { [super viewDidLoad]; - + [self.childControllerContainerView setBackgroundColor:[UIColor blackColor]]; - + [self setupGestureRecognizers]; } @@ -827,7 +826,6 @@ -(void)setShowsStatusBarBackgroundView:(BOOL)showsDummyStatusBar{ frame.size.height = CGRectGetHeight(self.view.bounds); } [self.childControllerContainerView setFrame:frame]; - [self.dummyStatusBarView setHidden:!showsDummyStatusBar]; } } else { @@ -837,7 +835,7 @@ -(void)setShowsStatusBarBackgroundView:(BOOL)showsDummyStatusBar{ -(void)setStatusBarViewBackgroundColor:(UIColor *)dummyStatusBarColor{ _statusBarViewBackgroundColor = dummyStatusBarColor; - [self.dummyStatusBarView setBackgroundColor:_statusBarViewBackgroundColor]; + [self.view setBackgroundColor:_statusBarViewBackgroundColor]; } #pragma mark - Getters @@ -873,26 +871,18 @@ -(CGFloat)visibleRightDrawerWidth{ } -(UIView*)childControllerContainerView{ - if(_childControllerContainerView == nil){ - _childControllerContainerView = [[UIView alloc] initWithFrame:self.view.bounds]; - [_childControllerContainerView setBackgroundColor:[UIColor clearColor]]; - [_childControllerContainerView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; - [self.view addSubview:_childControllerContainerView]; + if (_childControllerContainerView == nil) { + CGRect b = self.view.bounds; + if(_childControllerContainerView == nil) { + _childControllerContainerView = [[UIView alloc] initWithFrame:b]; + [_childControllerContainerView setBackgroundColor:[UIColor clearColor]]; + [_childControllerContainerView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; + [self.view addSubview:_childControllerContainerView]; + } } return _childControllerContainerView; } --(UIView*)dummyStatusBarView{ - if(_dummyStatusBarView==nil){ - _dummyStatusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 20)]; - [_dummyStatusBarView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; - [_dummyStatusBarView setBackgroundColor:self.statusBarViewBackgroundColor]; - [_dummyStatusBarView setHidden:!_showsStatusBarBackgroundView]; - [self.view addSubview:_dummyStatusBarView]; - } - return _dummyStatusBarView; -} - -(UIColor*)statusBarViewBackgroundColor{ if(_statusBarViewBackgroundColor == nil){ _statusBarViewBackgroundColor = [UIColor blackColor]; @@ -940,7 +930,7 @@ -(void)panGestureCallback:(UIPanGestureRecognizer *)panGesture{ UIViewController * sideDrawerViewController = [self sideDrawerViewControllerForSide:self.openSide]; [sideDrawerViewController beginAppearanceTransition:NO animated:NO]; [sideDrawerViewController endAppearanceTransition]; - + //Drawer is about to become visible [self prepareToPresentDrawer:visibleSide animated:NO]; [visibleSideDrawerViewController endAppearanceTransition]; @@ -1130,7 +1120,7 @@ -(void)prepareToPresentDrawer:(MMDrawerSide)drawer animated:(BOOL)animated{ UIViewController * sideDrawerViewControllerToPresent = [self sideDrawerViewControllerForSide:drawer]; UIViewController * sideDrawerViewControllerToHide = [self sideDrawerViewControllerForSide:drawerToHide]; - + [self.childControllerContainerView sendSubviewToBack:sideDrawerViewControllerToHide.view]; [sideDrawerViewControllerToHide.view setHidden:YES]; [sideDrawerViewControllerToPresent.view setHidden:NO];