起因:
之前一直没有遇到类似问题,最近遇到项目UI视图经常卡死现象,一直没找到必现条件,后面发现在rootViewController页面触发侧滑返回pop操作,再push就会卡死,定位到是侧滑手势导致的。
分析:
因为我们的navigationController是自定义的,所以系统的侧滑返回手势会被禁掉,项目需要我们执行以下代码,把侧滑手势打开
@implementation DDNavigationController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
__weak typeof(self) weakself = self;
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.delegate = (id)weakself;
}
}
@end
此时,如果我们在rootViewController里面执行侧滑手势,相当于执行了一个pop操作(只是我们没有看到效果),然后接着再去执行push,自然就push不到下一级页面了。
解决方法:
判断当前页面是不是根视图,如果是就禁止掉侧滑返回手势,如果不是就打开,代码如下(在DDNavigationController中实现):
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer == self.interactivePopGestureRecognizer) {
// 屏蔽调用rootViewController的滑动返回手势
if (self.viewControllers.count < 2 || self.visibleViewController == [self.viewControllers objectAtIndex:0]) {
return NO;
}
}
return YES;
}
。