可视化下如何更好的全屏返回

根据网上的资料现记录下两种实现全屏返回的方法:
方法一:

首先创建一个BaseNavigationController 只要添加下面的方法就搞定了。
- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *targets = [self.interactivePopGestureRecognizer valueForKey:@"_targets"];
    id target = [targets.firstObject valueForKey:@"target"];
    SEL action = NSSelectorFromString(@"handleNavigationTransition:");
    //创建滑动手势
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:target action:action];
    [self.view addGestureRecognizer:panGesture];
}

方法二:
<推荐使用,第一种会有小问题>

#import 
@interface BaseNavigationController ()
/** 系统手势代理 */
@property(nonatomic, strong) id popGesture;
/** 实现代理*/
self.popGesture = self.interactivePopGestureRecognizer;
self.delegate = self;

/** 实现代理方法 */
#pragma mark - UINavigationControllerDelegate
// 当控制器显示完毕的时候调用
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    // 根据 栈 先进后出
    if (self.viewControllers[0] == viewController) {    // 根控制器
        // 还原代理
        self.interactivePopGestureRecognizer.delegate = self.popGesture;
    } else  {   // 非控制器
        // 清空手势代理就能实现滑动返回,iOS6不支持
        self.interactivePopGestureRecognizer.delegate = nil;
    }
}

最后,只要在Main.storyboard将NavigationCotroller继承BaseNavigationController 就可以了。

你可能感兴趣的:(可视化下如何更好的全屏返回)