美文网首页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