美文网首页iOS Swift && Objective-C
iOS开发: 导航控制器 - 全屏右滑pop返回效果

iOS开发: 导航控制器 - 全屏右滑pop返回效果

作者: 伯wen | 来源:发表于2017-04-08 16:38 被阅读230次
    • iOS开发中, 导航控制器的pop返回可以通过点击<a>返回按钮</a> 和 <a>左侧边缘右滑</a>实现

    • 我们还可以自定义导航控制器, 实现全屏右滑pop返回的效果

    • 效果如下图:


      全屏左划pop返回效果
    • 实现思路:

      • 自定义导航控制器
      • 获取导航控制器pop返回的手势
      • 自定义平移手势(UIPanGestureRecognizer)
      • 平移手势调用<a>pop返回手势代理</a>的<a>handleNavigationTransition:</a>方法
      • 将平移手势添加到 pop返回手势的主视图上(就是控制器的容器视图)
      • 设置pop返回的手势的<a>delaysTouchesBegan</a>属性为YES
    • .h文件

    #import <UIKit/UIKit.h>
    
    @interface LTNavigationViewController : UINavigationController
    
    @end
    
    
    • .m文件代码
    #import "LTNavigationViewController.h"
    
    @interface LTNavigationViewController () <UIGestureRecognizerDelegate>
    
    @end
    
    @implementation LTNavigationViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        UIGestureRecognizer *gester = self.interactivePopGestureRecognizer;
        
        // 自定义手势
        // 手势加载谁身上, 手势执行谁的方法
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:gester.delegate action:NSSelectorFromString(@"handleNavigationTransition:")];
        // 其实就是控制器的容器视图
        [gester.view addGestureRecognizer:pan];
        
        gester.delaysTouchesBegan = YES;
        pan.delegate = self;
    }
    
    #pragma mark - < UIGestureRecognizerDelegate >
    
    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
    {
        // 防止根视图控制器被pop, 导致程序假死
        return self.childViewControllers.count > 1;
    }
    
    @end
    

    相关文章

      网友评论

        本文标题:iOS开发: 导航控制器 - 全屏右滑pop返回效果

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