17
17
#import " MDMPresentationTransitionController.h"
18
18
19
19
#import " MDMTransition.h"
20
+ #import " MDMViewControllerInteractiveTransitionContext.h"
20
21
#import " MDMViewControllerTransitionContext.h"
21
22
22
23
@interface MDMPresentationTransitionController () <UIViewControllerTransitioningDelegate, MDMViewControllerTransitionContextDelegate>
@@ -30,10 +31,12 @@ @implementation MDMPresentationTransitionController {
30
31
UIPresentationController *_presentationController;
31
32
32
33
MDMViewControllerTransitionContext *_context;
34
+ MDMViewControllerInteractiveTransitionContext *_interactiveContext;
33
35
__weak UIViewController *_source;
34
36
}
35
37
36
38
@synthesize transition = _transition;
39
+ @synthesize interactiveTransition = _interactiveTransition;
37
40
38
41
- (nonnull instancetype )initWithViewController : (nonnull UIViewController *)viewController {
39
42
self = [super init ];
@@ -60,6 +63,10 @@ - (void)setTransition:(id<MDMTransition>)transition {
60
63
return _context.transition ;
61
64
}
62
65
66
+ - (void )setInteractiveTransition : (id <MDMInteractiveTransition>)transition {
67
+ _interactiveTransition = transition;
68
+ }
69
+
63
70
#pragma mark - UIViewControllerTransitioningDelegate
64
71
65
72
// Animated transitions
@@ -84,6 +91,14 @@ - (void)setTransition:(id<MDMTransition>)transition {
84
91
return _context;
85
92
}
86
93
94
+ - (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForPresentation : (id <UIViewControllerAnimatedTransitioning>)animator {
95
+ return [self prepareForInteractiveTransition ];
96
+ }
97
+
98
+ - (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForDismissal : (id <UIViewControllerAnimatedTransitioning>)animator {
99
+ return [self prepareForInteractiveTransition ];
100
+ }
101
+
87
102
// Presentation
88
103
89
104
- (UIPresentationController *)presentationControllerForPresentedViewController : (UIViewController *)presented
@@ -129,4 +144,35 @@ - (void)prepareForTransitionWithSourceViewController:(nullable UIViewController
129
144
}
130
145
}
131
146
147
+ - (nullable id <UIViewControllerInteractiveTransitioning>) prepareForInteractiveTransition {
148
+ Boolean isInteractive = false ;
149
+
150
+ if (_interactiveTransition) {
151
+ Boolean isInteractiveResponds = false ;
152
+ Boolean startWithInteractiveResponds = false ;
153
+
154
+ if ([_interactiveTransition respondsToSelector: @selector (isInteractive: )]) {
155
+ isInteractiveResponds = true ;
156
+ } else {
157
+ return nil ;
158
+ }
159
+
160
+ if ([_interactiveTransition respondsToSelector: @selector (startWithInteractiveContext: )]) {
161
+ startWithInteractiveResponds = true ;
162
+ } else {
163
+ return nil ;
164
+ }
165
+
166
+ if (isInteractiveResponds && startWithInteractiveResponds) {
167
+ isInteractive = [_interactiveTransition isInteractive: _context];
168
+ if (isInteractive) {
169
+ _interactiveContext = [[MDMViewControllerInteractiveTransitionContext alloc ] initWithTransition: _context];
170
+
171
+ [_interactiveTransition startWithInteractiveContext: _interactiveContext];
172
+ }
173
+ }
174
+ }
175
+
176
+ return isInteractive == false ? nil : [_interactiveContext getPercentIT ];
177
+ }
132
178
@end
0 commit comments