Skip to content

Commit 5bd6d1d

Browse files
authored
Merge pull request #1 from constZinovyev/fix-drawercontroller-appear-animation
Added check isAnimatingDrawer in setMaximumDrawerWidth
2 parents 08b1538 + 4e49fed commit 5bd6d1d

1 file changed

Lines changed: 48 additions & 37 deletions

File tree

MMDrawerController/MMDrawerController.m

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -589,46 +589,57 @@ -(void)setMaximumRightDrawerWidth:(CGFloat)width animated:(BOOL)animated complet
589589
}
590590

591591
- (void)setMaximumDrawerWidth:(CGFloat)width forSide:(MMDrawerSide)drawerSide animated:(BOOL)animated completion:(void(^)(BOOL finished))completion{
592-
NSParameterAssert(width > 0);
593-
NSParameterAssert(drawerSide != MMDrawerSideNone);
594592

595-
UIViewController *sideDrawerViewController = [self sideDrawerViewControllerForSide:drawerSide];
596-
CGFloat oldWidth = 0.f;
597-
NSInteger drawerSideOriginCorrection = 1;
598-
if (drawerSide == MMDrawerSideLeft) {
599-
oldWidth = _maximumLeftDrawerWidth;
600-
_maximumLeftDrawerWidth = width;
601-
}
602-
else if(drawerSide == MMDrawerSideRight){
603-
oldWidth = _maximumRightDrawerWidth;
604-
_maximumRightDrawerWidth = width;
605-
drawerSideOriginCorrection = -1;
593+
if(self.isAnimatingDrawer){
594+
if(completion){
595+
completion(NO);
596+
}
606597
}
607-
608-
CGFloat distance = ABS(width-oldWidth);
609-
NSTimeInterval duration = [self animationDurationForAnimationDistance:distance];
610-
611-
if(self.openSide == drawerSide){
612-
CGRect newCenterRect = self.centerContainerView.frame;
613-
newCenterRect.origin.x = drawerSideOriginCorrection*width;
614-
[UIView
615-
animateWithDuration:(animated?duration:0)
616-
delay:0.0
617-
options:UIViewAnimationOptionCurveEaseInOut
618-
animations:^{
619-
[self.centerContainerView setFrame:newCenterRect];
620-
[sideDrawerViewController.view setFrame:sideDrawerViewController.mm_visibleDrawerFrame];
621-
}
622-
completion:^(BOOL finished) {
623-
if(completion != nil){
624-
completion(finished);
598+
else {
599+
600+
NSParameterAssert(width > 0);
601+
NSParameterAssert(drawerSide != MMDrawerSideNone);
602+
603+
UIViewController *sideDrawerViewController = [self sideDrawerViewControllerForSide:drawerSide];
604+
CGFloat oldWidth = 0.f;
605+
NSInteger drawerSideOriginCorrection = 1;
606+
if (drawerSide == MMDrawerSideLeft) {
607+
oldWidth = _maximumLeftDrawerWidth;
608+
_maximumLeftDrawerWidth = width;
609+
}
610+
else if(drawerSide == MMDrawerSideRight){
611+
oldWidth = _maximumRightDrawerWidth;
612+
_maximumRightDrawerWidth = width;
613+
drawerSideOriginCorrection = -1;
614+
}
615+
616+
CGFloat distance = ABS(width-oldWidth);
617+
NSTimeInterval duration = [self animationDurationForAnimationDistance:distance];
618+
619+
if(self.openSide == drawerSide){
620+
CGRect newCenterRect = self.centerContainerView.frame;
621+
newCenterRect.origin.x = drawerSideOriginCorrection*width;
622+
[UIView
623+
animateWithDuration:(animated?duration:0)
624+
delay:0.0
625+
options:UIViewAnimationOptionCurveEaseInOut
626+
animations:^{
627+
[self.centerContainerView setFrame:newCenterRect];
628+
[sideDrawerViewController.view setFrame:sideDrawerViewController.mm_visibleDrawerFrame];
625629
}
626-
}];
627-
}
628-
else{
629-
[sideDrawerViewController.view setFrame:sideDrawerViewController.mm_visibleDrawerFrame];
630-
if(completion != nil){
631-
completion(YES);
630+
completion:^(BOOL finished) {
631+
[self setAnimatingDrawer:NO];
632+
if(completion != nil){
633+
completion(finished);
634+
}
635+
}];
636+
}
637+
else{
638+
[sideDrawerViewController.view setFrame:sideDrawerViewController.mm_visibleDrawerFrame];
639+
[self setAnimatingDrawer:NO];
640+
if(completion != nil){
641+
completion(YES);
642+
}
632643
}
633644
}
634645
}

0 commit comments

Comments
 (0)