@@ -16,9 +16,16 @@ @implementation TiUINavigationWindowProxy
16
16
17
17
- (void )_destroy
18
18
{
19
+ if (fullWidthBackGestureRecognizer != nil ) {
20
+ [fullWidthBackGestureRecognizer setDelegate: nil ];
21
+ [navController.view removeGestureRecognizer: fullWidthBackGestureRecognizer];
22
+ }
23
+
19
24
RELEASE_TO_NIL (rootWindow);
20
25
RELEASE_TO_NIL (navController);
21
26
RELEASE_TO_NIL (current);
27
+ RELEASE_TO_NIL (fullWidthBackGestureRecognizer);
28
+
22
29
[super _destroy ];
23
30
}
24
31
@@ -88,14 +95,45 @@ - (UINavigationController *)controller
88
95
[TiUtils configureController: navController withObject: self ];
89
96
[navController.interactivePopGestureRecognizer addTarget: self action: @selector (popGestureStateHandler: )];
90
97
[[navController interactivePopGestureRecognizer ] setDelegate: self ];
98
+
99
+ BOOL interactiveDismissModeEnabled = [TiUtils boolValue: [self valueForKey: @" interactiveDismissModeEnabled" ] def: NO ];
100
+ if (interactiveDismissModeEnabled) {
101
+ [self configureFullWidthSwipeToClose ];
102
+ }
91
103
}
92
104
return navController;
93
105
}
94
106
107
+ - (void )configureFullWidthSwipeToClose
108
+ {
109
+ fullWidthBackGestureRecognizer = [[UIPanGestureRecognizer alloc ] init ];
110
+
111
+ if (navController.interactivePopGestureRecognizer == nil ) {
112
+ return ;
113
+ }
114
+
115
+ id targets = [navController.interactivePopGestureRecognizer valueForKey: @" targets" ];
116
+ if (targets == nil ) {
117
+ return ;
118
+ }
119
+
120
+ [fullWidthBackGestureRecognizer setValue: targets forKey: @" targets" ];
121
+ [fullWidthBackGestureRecognizer setDelegate: self ];
122
+ [navController.view addGestureRecognizer: fullWidthBackGestureRecognizer];
123
+ }
124
+
95
125
- (BOOL )gestureRecognizerShouldBegin : (UIGestureRecognizer *)gestureRecognizer
96
126
{
97
127
BOOL isRootWindow = (current == rootWindow);
98
128
129
+ BOOL interactiveDismissModeEnabled = [TiUtils boolValue: [self valueForKey: @" interactiveDismissModeEnabled" ] def: NO ];
130
+ if (interactiveDismissModeEnabled && [gestureRecognizer isKindOfClass: [UIPanGestureRecognizer class ]]) {
131
+ BOOL isSystemSwipeToCloseEnabled = navController.interactivePopGestureRecognizer .isEnabled == YES ;
132
+ BOOL areThereStackedViewControllers = navController.viewControllers .count > 1 ;
133
+
134
+ return isSystemSwipeToCloseEnabled || areThereStackedViewControllers;
135
+ }
136
+
99
137
if (current != nil && !isRootWindow) {
100
138
return [TiUtils boolValue: [current valueForKey: @" swipeToClose" ] def: YES ];
101
139
}
0 commit comments