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