美文网首页
可视化下如何更好的全屏返回

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

作者: 来自宇宙边际的奥特蛋 | 来源:发表于2019-01-08 16:23 被阅读8次

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

    首先创建一个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 <objc/runtime.h>
    @interface BaseNavigationController ()<UINavigationControllerDelegate>
    /** 系统手势代理 */
    @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 就可以了。

    相关文章

      网友评论

          本文标题:可视化下如何更好的全屏返回

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