圖示:
恢復(fù)滑動(dòng)返回功能
** 分析:**
- 把系統(tǒng)的返回按鈕覆蓋
1.手勢失效
1.1 手勢被清空
1.2 手勢代理是不是出問題钮惠,導(dǎo)致手勢失效
#import "ZYNavigationController.h"
self.interactivePopGestureRecognizer.delegate = nil;
但是抒倚,此時(shí)采转,還有個(gè)bug钙畔,就是當(dāng)我們滑動(dòng)到當(dāng)前棧頂控制器時(shí)沪哺,在滑動(dòng)翘魄,在點(diǎn)擊設(shè)置朗恳,就會(huì)造成卡頓現(xiàn)象鳍烁。又稱假死狀態(tài)得糜。 - 假死狀態(tài):程序還在運(yùn)行敬扛,但是界面死了。不能操作朝抖。
解決:根控制器啥箭,不需要滑動(dòng),需手動(dòng)管理治宣。
** 1.遵守代理**
@interface ZYNavigationController ()<UIGestureRecognizerDelegate>
@end
** 2.設(shè)置代理**
- (void)viewDidLoad {
[super viewDidLoad];
// 控制手勢什么時(shí)候觸發(fā),只有非控制器的時(shí)候才會(huì)觸發(fā)
self.interactivePopGestureRecognizer.delegate =self;
}
** 3.實(shí)現(xiàn)代理方法**
#pragma mark -UIGestureRecognizerDelegate
/*是否觸發(fā)手勢/
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
return self.childViewControllers.count > 1;
}
全屏滑動(dòng)返回
為什么導(dǎo)航控制器的手勢不是全屏滑動(dòng)
將上述viewDidLoad改為以下
- (void)viewDidLoad {
[super viewDidLoad];
// 控制手勢什么時(shí)候觸發(fā)急侥,只有非控制器的時(shí)候才會(huì)觸發(fā)
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget: self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];
[self.view addGestureRecognizer:pan];
pan.delegate = self;
self.interactivePopGestureRecognizer.enabled = NO;
}
效果圖: