遵循代理 UIGestureRecognizerDelegate
UIGestureRecognizer *gesture = self.interactivePopGestureRecognizer;
gesture.enabled = NO;
UIView *gestureView = gesture.view;
UIPanGestureRecognizer *popRecognizer = [[UIPanGestureRecognizer alloc] init];
popRecognizer.delegate = self;
popRecognizer.maximumNumberOfTouches = 1;
[gestureView addGestureRecognizer:popRecognizer];
NSMutableArray *_targets = [gesture valueForKey:@"_targets"];
id gestureRecognizerTarget = [_targets firstObject];
id navigationInteractiveTransition = [gestureRecognizerTarget valueForKey:@"_target"];
SEL handelTransition = NSSelectorFromString(@"handleNavigationTransition:");
[popRecognizer addTarget:navigationInteractiveTransition action:handelTransition];
代理方法
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
//這里有兩個條件不允許手勢 1 當(dāng)前控制器為根控制器 2 如果這個push pop 動畫正在執(zhí)行(私有屬性)
if (self.childViewControllers.count == 1) {
return NO;
}
//直播頁面不允許滑動返回
UIViewController *vc = [self.childViewControllers lastObject];
if ([vc isKindOfClass:NSClassFromString(@"ChatViewController")]) {
return NO;
}
if ([[self valueForKey:@"_isTransitioning"] boolValue]) {
return NO;
}
return YES;
// return self.viewControllers.count != 1 && ![[self valueForKey:@"_isTransitioning"] boolValue];
}