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

  • iOS开发中, 导航控制器的pop返回可以通过点击返回按钮左侧边缘右滑实现

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

  • 效果如下图:


    iOS开发: 导航控制器 - 全屏右滑pop返回效果_第1张图片
    全屏左划pop返回效果
  • 实现思路:

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

#import 

@interface LTNavigationViewController : UINavigationController

@end

  • .m文件代码
#import "LTNavigationViewController.h"

@interface LTNavigationViewController () 

@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返回效果)