美文网首页
切换rootViewController时循环删除之前rootV

切换rootViewController时循环删除之前rootV

作者: 拂溪 | 来源:发表于2020-06-14 11:32 被阅读0次

    遇到了iOS11 切换rootVC后之前的子控制器没有删除的问题。为了解决这个问题,采用了循环删除旧rootVC的子控制器的解决办法。但是这个办法会闪一下,为了解决这个问题,在切换之前做了截屏处理。

    + (void)replaceRootViewControllerTo:(UIViewController*) vc :(void(^)(void))callback {
        AppDelegate* del = (AppDelegate*)[UIApplication sharedApplication].delegate;
        UIViewController* root = del.window.rootViewController;
    
        UIGraphicsBeginImageContextWithOptions(del.window.bounds.size, FALSE, UIScreen.mainScreen.scale);
        [del.window drawViewHierarchyInRect:del.window.bounds afterScreenUpdates:YES];
        UIImage* result = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        UIImageView* view = [[UIImageView alloc] initWithImage:result];
        [del.window addSubview:view];
    
        [self dismissChildVCFrom:root :^{
            del.window.rootViewController = vc;
            //[del.window bringSubviewToFront:view];
            [view removeFromSuperview];
            if (callback) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    callback();
                });
            }
        }];
    }
    
    + (void)dismissChildVCFrom:(UIViewController *)vc :(void(^)(void))callback {
        if ([vc presentedViewController]) {
            UIViewController *nextRootVC = [vc presentedViewController];
            [self dismissChildVCFrom:nextRootVC :^{
                [nextRootVC dismissViewControllerAnimated:NO completion:callback];
            }];
            
        } else if ([vc isKindOfClass:[UITabBarController class]]) {
            UIViewController *nextRootVC = [(UITabBarController *)vc selectedViewController];
            [self dismissChildVCFrom:nextRootVC :callback];
            
        } else if ([vc isKindOfClass:[UINavigationController class]]){
            UIViewController *nextRootVC = [(UINavigationController *)vc visibleViewController];
            [self dismissChildVCFrom:nextRootVC :callback];
    
        } else {
            callback();
        }
    }
    

    相关文章

      网友评论

          本文标题:切换rootViewController时循环删除之前rootV

          本文链接:https://www.haomeiwen.com/subject/pylcxktx.html