-
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
网友评论