Skip to content

Commit 4e49fed

Browse files
author
k.zinovyev
committed
Added check isAnimatingDrawer in setMaximumDrawerWidth
In some cases, animations close sidebar menu start simultaneously. Because of this, the animation behaves incorrectly
1 parent 08b1538 commit 4e49fed

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)