@@ -138,6 +138,9 @@ public protocol NavigationDrawerControllerDelegate {
138
138
139
139
@objc ( NavigationDrawerController)
140
140
open class NavigationDrawerController : TransitionController {
141
+ /// A boolean indicating if the panel is animating.
142
+ fileprivate var isAnimating = false
143
+
141
144
/**
142
145
A CGFloat property that is used internally to track
143
146
the original (x) position of the container view when panning.
@@ -216,6 +219,7 @@ open class NavigationDrawerController: TransitionController {
216
219
if nil != leftView {
217
220
isLeftViewEnabled = value
218
221
}
222
+
219
223
if nil != rightView {
220
224
isRightViewEnabled = value
221
225
}
@@ -429,21 +433,21 @@ open class NavigationDrawerController: TransitionController {
429
433
v. frame. size. width = leftViewWidth
430
434
v. frame. size. height = view. bounds. height
431
435
leftViewThreshold = leftViewWidth / 2
432
- if let vc = leftViewController {
436
+
437
+ if let vc = leftViewController {
438
+ vc. view. frame = v. bounds
433
439
vc. view. frame. size. width = leftViewWidth
434
- vc. view. frame. size. height = v. bounds. height
435
- vc. view. center = CGPoint ( x: leftViewWidth / 2 , y: v. bounds. height / 2 )
436
440
}
437
441
}
438
442
439
443
if let v = rightView {
440
444
v. frame. size. width = rightViewWidth
441
445
v. frame. size. height = view. bounds. height
442
446
rightViewThreshold = view. bounds. width - rightViewWidth / 2
447
+
443
448
if let vc = rightViewController {
444
- vc. view. frame. size. width = rightViewWidth
445
- vc. view. frame. size. height = v. bounds. height
446
- vc. view. center = CGPoint ( x: rightViewWidth / 2 , y: v. bounds. height / 2 )
449
+ vc. view. frame = v. bounds
450
+ vc. view. frame. size. width = rightViewWidth
447
451
}
448
452
}
449
453
@@ -527,6 +531,7 @@ open class NavigationDrawerController: TransitionController {
527
531
v. bounds. size. width = width
528
532
v. layer. position. x = - width / 2
529
533
s. rootViewController. view. alpha = 1
534
+
530
535
} ) { [ weak self, v = v] _ in
531
536
guard let s = self else {
532
537
return
@@ -536,6 +541,7 @@ open class NavigationDrawerController: TransitionController {
536
541
s. layoutSubviews ( )
537
542
s. hideView ( container: v)
538
543
}
544
+
539
545
} else {
540
546
UIView . animate ( withDuration: duration,
541
547
animations: { [ weak self, v = v] in
@@ -546,6 +552,7 @@ open class NavigationDrawerController: TransitionController {
546
552
v. bounds. size. width = width
547
553
v. layer. position. x = width / 2
548
554
s. rootViewController. view. alpha = 0.5
555
+
549
556
} ) { [ weak self, v = v] _ in
550
557
guard let s = self else {
551
558
return
@@ -563,6 +570,7 @@ open class NavigationDrawerController: TransitionController {
563
570
hideView ( container: v)
564
571
v. layer. position. x = - v. bounds. width / 2
565
572
rootViewController. view. alpha = 1
573
+
566
574
} else {
567
575
showView ( container: v)
568
576
v. layer. position. x = width / 2
@@ -609,6 +617,7 @@ open class NavigationDrawerController: TransitionController {
609
617
v. bounds. size. width = width
610
618
v. layer. position. x = s. view. bounds. width + width / 2
611
619
s. rootViewController. view. alpha = 1
620
+
612
621
} ) { [ weak self, v = v] _ in
613
622
guard let s = self else {
614
623
return
@@ -618,6 +627,7 @@ open class NavigationDrawerController: TransitionController {
618
627
s. layoutSubviews ( )
619
628
s. hideView ( container: v)
620
629
}
630
+
621
631
} else {
622
632
UIView . animate ( withDuration: duration,
623
633
animations: { [ weak self, v = v] in
@@ -628,6 +638,7 @@ open class NavigationDrawerController: TransitionController {
628
638
v. bounds. size. width = width
629
639
v. layer. position. x = s. view. bounds. width - width / 2
630
640
s. rootViewController. view. alpha = 0.5
641
+
631
642
} ) { [ weak self, v = v] _ in
632
643
guard let s = self else {
633
644
return
@@ -645,6 +656,7 @@ open class NavigationDrawerController: TransitionController {
645
656
hideView ( container: v)
646
657
v. layer. position. x = view. bounds. width + v. bounds. width / 2
647
658
rootViewController. view. alpha = 1
659
+
648
660
} else {
649
661
showView ( container: v)
650
662
v. layer. position. x = view. bounds. width - width / 2
@@ -684,6 +696,10 @@ open class NavigationDrawerController: TransitionController {
684
696
leftView. Defaults to 0.
685
697
*/
686
698
open func openLeftView( velocity: CGFloat = 0 ) {
699
+ guard !isAnimating else {
700
+ return
701
+ }
702
+
687
703
guard isLeftViewEnabled else {
688
704
return
689
705
}
@@ -692,6 +708,8 @@ open class NavigationDrawerController: TransitionController {
692
708
return
693
709
}
694
710
711
+ isAnimating = true
712
+
695
713
hideStatusBar ( )
696
714
showView ( container: v)
697
715
@@ -707,11 +725,13 @@ open class NavigationDrawerController: TransitionController {
707
725
708
726
v. layer. position. x = v. bounds. width / 2
709
727
s. rootViewController. view. alpha = 0.5
728
+
710
729
} ) { [ weak self] _ in
711
730
guard let s = self else {
712
731
return
713
732
}
714
733
734
+ s. isAnimating = false
715
735
s. delegate? . navigationDrawerController ? ( navigationDrawerController: s, didOpen: . left)
716
736
}
717
737
}
@@ -723,6 +743,10 @@ open class NavigationDrawerController: TransitionController {
723
743
leftView. Defaults to 0.
724
744
*/
725
745
open func openRightView( velocity: CGFloat = 0 ) {
746
+ guard !isAnimating else {
747
+ return
748
+ }
749
+
726
750
guard isRightViewEnabled else {
727
751
return
728
752
}
@@ -731,6 +755,8 @@ open class NavigationDrawerController: TransitionController {
731
755
return
732
756
}
733
757
758
+ isAnimating = true
759
+
734
760
hideStatusBar ( )
735
761
showView ( container: v)
736
762
@@ -746,11 +772,14 @@ open class NavigationDrawerController: TransitionController {
746
772
747
773
v. layer. position. x = s. view. bounds. width - v. bounds. width / 2
748
774
s. rootViewController. view. alpha = 0.5
775
+
749
776
} ) { [ weak self] _ in
750
777
guard let s = self else {
751
778
return
752
779
}
753
780
781
+ s. isAnimating = false
782
+
754
783
s. delegate? . navigationDrawerController ? ( navigationDrawerController: s, didOpen: . right)
755
784
}
756
785
}
@@ -762,6 +791,10 @@ open class NavigationDrawerController: TransitionController {
762
791
leftView. Defaults to 0.
763
792
*/
764
793
open func closeLeftView( velocity: CGFloat = 0 ) {
794
+ guard !isAnimating else {
795
+ return
796
+ }
797
+
765
798
guard isLeftViewEnabled else {
766
799
return
767
800
}
@@ -770,7 +803,7 @@ open class NavigationDrawerController: TransitionController {
770
803
return
771
804
}
772
805
773
- isUserInteractionEnabled = true
806
+ isAnimating = true
774
807
775
808
delegate? . navigationDrawerController ? ( navigationDrawerController: self , willClose: . left)
776
809
@@ -782,6 +815,7 @@ open class NavigationDrawerController: TransitionController {
782
815
783
816
v. layer. position. x = - v. bounds. width / 2
784
817
s. rootViewController. view. alpha = 1
818
+
785
819
} ) { [ weak self, v = v] _ in
786
820
guard let s = self else {
787
821
return
@@ -790,6 +824,9 @@ open class NavigationDrawerController: TransitionController {
790
824
s. hideView ( container: v)
791
825
s. toggleStatusBar ( )
792
826
827
+ s. isAnimating = false
828
+ s. isUserInteractionEnabled = true
829
+
793
830
s. delegate? . navigationDrawerController ? ( navigationDrawerController: s, didClose: . left)
794
831
}
795
832
}
@@ -801,6 +838,10 @@ open class NavigationDrawerController: TransitionController {
801
838
leftView. Defaults to 0.
802
839
*/
803
840
open func closeRightView( velocity: CGFloat = 0 ) {
841
+ guard !isAnimating else {
842
+ return
843
+ }
844
+
804
845
guard isRightViewEnabled else {
805
846
return
806
847
}
@@ -809,7 +850,7 @@ open class NavigationDrawerController: TransitionController {
809
850
return
810
851
}
811
852
812
- isUserInteractionEnabled = true
853
+ isAnimating = true
813
854
814
855
delegate? . navigationDrawerController ? ( navigationDrawerController: self , willClose: . right)
815
856
@@ -821,6 +862,7 @@ open class NavigationDrawerController: TransitionController {
821
862
822
863
v. layer. position. x = s. view. bounds. width + v. bounds. width / 2
823
864
s. rootViewController. view. alpha = 1
865
+
824
866
} ) { [ weak self, v = v] _ in
825
867
guard let s = self else {
826
868
return
@@ -829,6 +871,9 @@ open class NavigationDrawerController: TransitionController {
829
871
s. hideView ( container: v)
830
872
s. toggleStatusBar ( )
831
873
874
+ s. isAnimating = false
875
+ s. isUserInteractionEnabled = true
876
+
832
877
s. delegate? . navigationDrawerController ? ( navigationDrawerController: s, didClose: . right)
833
878
}
834
879
}
@@ -1144,6 +1189,7 @@ extension NavigationDrawerController: UIGestureRecognizerDelegate {
1144
1189
showView ( container: v)
1145
1190
1146
1191
delegate? . navigationDrawerController ? ( navigationDrawerController: self , didBeginPanAt: point, position: . left)
1192
+
1147
1193
case . changed:
1148
1194
let w = v. bounds. width
1149
1195
let translationX = recognizer. translation ( in: v) . x
@@ -1158,17 +1204,19 @@ extension NavigationDrawerController: UIGestureRecognizerDelegate {
1158
1204
}
1159
1205
1160
1206
delegate? . navigationDrawerController ? ( navigationDrawerController: self , didChangePanAt: point, position: . left)
1207
+
1161
1208
case . ended, . cancelled, . failed:
1162
1209
let p = recognizer. velocity ( in: recognizer. view)
1163
- let x = p. x >= 500 || p. x <= - 500 ? p. x : 0
1210
+ let x = p. x >= 1000 || p. x <= - 1000 ? p. x : 0
1164
1211
1165
1212
delegate? . navigationDrawerController ? ( navigationDrawerController: self , didEndPanAt: point, position: . left)
1166
1213
1167
- if v. frame. origin. x <= - leftViewWidth + leftViewThreshold || x < - 500 {
1214
+ if v. frame. origin. x <= - leftViewWidth + leftViewThreshold || x < - 1000 {
1168
1215
closeLeftView ( velocity: x)
1169
1216
} else {
1170
1217
openLeftView ( velocity: x)
1171
1218
}
1219
+
1172
1220
case . possible: break
1173
1221
}
1174
1222
}
@@ -1198,6 +1246,7 @@ extension NavigationDrawerController: UIGestureRecognizerDelegate {
1198
1246
showView ( container: v)
1199
1247
1200
1248
delegate? . navigationDrawerController ? ( navigationDrawerController: self , didBeginPanAt: point, position: . right)
1249
+
1201
1250
case . changed:
1202
1251
let w = v. bounds. width
1203
1252
let translationX = recognizer. translation ( in: v) . x
@@ -1212,6 +1261,7 @@ extension NavigationDrawerController: UIGestureRecognizerDelegate {
1212
1261
}
1213
1262
1214
1263
delegate? . navigationDrawerController ? ( navigationDrawerController: self , didChangePanAt: point, position: . right)
1264
+
1215
1265
case . ended, . cancelled, . failed:
1216
1266
let p = recognizer. velocity ( in: recognizer. view)
1217
1267
let x = p. x >= 1000 || p. x <= - 1000 ? p. x : 0
@@ -1223,6 +1273,7 @@ extension NavigationDrawerController: UIGestureRecognizerDelegate {
1223
1273
} else {
1224
1274
openRightView ( velocity: x)
1225
1275
}
1276
+
1226
1277
case . possible: break
1227
1278
}
1228
1279
}
0 commit comments