@@ -16,6 +16,7 @@ @implementation GDDViewControllerTransition {
1616 enum GDDViewControllerTransitionStackMode _stackMode;
1717 BOOL _alreadyInStack; // 是否已经显示过了
1818 Class _viewControllerClass;
19+ void (^_completion)(void );
1920}
2021
2122- (GDDViewControllerTransition *(^)(id data))data {
@@ -32,6 +33,13 @@ @implementation GDDViewControllerTransition {
3233 };
3334}
3435
36+ - (GDDViewControllerTransition *(^)(void (^completion)()))completion {
37+ return ^GDDViewControllerTransition *(void (^completion)()) {
38+ _completion = completion;
39+ return self;
40+ };
41+ }
42+
3543- (id <GDDTransitionBuilder> (^)(Class viewControllerClass))toClass {
3644 return ^id <GDDTransitionBuilder>(Class viewControllerClass) {
3745 if (_viewOption.launchMode ) {
@@ -124,7 +132,7 @@ - (instancetype)foundAndMergeViewOption:(UIViewController *)found {
124132 }
125133 UIViewController *rootViewController = UIApplication.sharedApplication .keyWindow .rootViewController ;
126134 if (rootViewController.presentedViewController ) { // 避免内存泄漏, 以释放 rootViewController 和 rootViewController.presentedViewController
127- [rootViewController dismissViewControllerAnimated: _viewOption.animated != GDPBBool_False completion: nil ];
135+ [rootViewController dismissViewControllerAnimated: _viewOption.animated != GDPBBool_False completion: _completion ];
128136 }
129137 UIWindow *window = UIApplication.sharedApplication .delegate .window ;
130138 if (!window) {
@@ -149,7 +157,7 @@ - (instancetype)foundAndMergeViewOption:(UIViewController *)found {
149157 // bring viewController to front
150158 UIViewController *controller = self.viewController ;
151159 if (controller.presentedViewController ) {
152- [controller dismissViewControllerAnimated: _viewOption.animated != GDPBBool_False completion: nil ];
160+ [controller dismissViewControllerAnimated: _viewOption.animated != GDPBBool_False completion: _completion ];
153161 }
154162 UIViewController *current = controller;
155163 while (current.parentViewController ) {
@@ -200,7 +208,7 @@ - (void)displayAndRefresh {
200208 }
201209
202210 [self config: YES ]; // 某些 ViewOption 需要在 present 之前设置才会生效
203- [top presentViewController: _stackMode == PRESENT ? controller : [[UINavigationController alloc ] initWithRootViewController: controller] animated: _viewOption.animated != GDPBBool_False completion: nil ];
211+ [top presentViewController: _stackMode == PRESENT ? controller : [[UINavigationController alloc ] initWithRootViewController: controller] animated: _viewOption.animated != GDPBBool_False completion: _completion ];
204212 [self updateData ];
205213}
206214
@@ -383,4 +391,4 @@ + (UIViewController *)getVisibleChildViewController:(UIViewController *)parent {
383391 return nil ;
384392 }
385393}
386- @end
394+ @end
0 commit comments