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 ];
@@ -56,6 +59,10 @@ - (void)setTransition:(id<MDMTransition>)transition {
56
59
}
57
60
}
58
61
62
+ - (void )setInteractiveTransition : (id <MDMInteractiveTransition>)transition {
63
+ _interactiveTransition = transition;
64
+ }
65
+
59
66
#pragma mark - UIViewControllerTransitioningDelegate
60
67
61
68
// Animated transitions
@@ -80,6 +87,14 @@ - (void)setTransition:(id<MDMTransition>)transition {
80
87
return _context;
81
88
}
82
89
90
+ - (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForPresentation : (id <UIViewControllerAnimatedTransitioning>)animator {
91
+ return [self prepareForInteractiveTransition ];
92
+ }
93
+
94
+ - (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForDismissal : (id <UIViewControllerAnimatedTransitioning>)animator {
95
+ return [self prepareForInteractiveTransition ];
96
+ }
97
+
83
98
// Presentation
84
99
85
100
- (UIPresentationController *)presentationControllerForPresentedViewController : (UIViewController *)presented
@@ -125,4 +140,35 @@ - (void)prepareForTransitionWithSourceViewController:(nullable UIViewController
125
140
}
126
141
}
127
142
143
+ - (nullable id <UIViewControllerInteractiveTransitioning>) prepareForInteractiveTransition {
144
+ Boolean isInteractive = false ;
145
+
146
+ if (_interactiveTransition) {
147
+ Boolean isInteractiveResponds = false ;
148
+ Boolean startWithInteractiveResponds = false ;
149
+
150
+ if ([_interactiveTransition respondsToSelector: @selector (isInteractive: )]) {
151
+ isInteractiveResponds = true ;
152
+ } else {
153
+ return nil ;
154
+ }
155
+
156
+ if ([_interactiveTransition respondsToSelector: @selector (startWithInteractiveContext: )]) {
157
+ startWithInteractiveResponds = true ;
158
+ } else {
159
+ return nil ;
160
+ }
161
+
162
+ if (isInteractiveResponds && startWithInteractiveResponds) {
163
+ isInteractive = [_interactiveTransition isInteractive: _context];
164
+ if (isInteractive) {
165
+ _interactiveContext = [[MDMViewControllerInteractiveTransitionContext alloc ] initWithTransition: _context];
166
+
167
+ [_interactiveTransition startWithInteractiveContext: _interactiveContext];
168
+ }
169
+ }
170
+ }
171
+
172
+ return isInteractive == false ? nil : [_interactiveContext getPercentIT ];
173
+ }
128
174
@end
0 commit comments