Как узнать, что VC полностью отключен, используя interactivePopGestureRecognizer (проведите пальцем, чтобы вернуться)

Я использую пользовательский контроллер левого меню, который может быть открыт UIPanGestureRecognizer когда UINavigationController только на высшем уровне. Если некоторые UIViewController помещается в стек, я хочу interactivePopGestureRecognizer работать должным образом и выскочить ВК, когда пользователь проводит слева направо вместо того, чтобы открывалось левое меню. Чтобы достичь этого, я подклассифицировал UINavigationController следующее:

- (void)viewDidLoad {
    [super viewDidLoad];
    //[self.interactivePopGestureRecognizer setDelegate:nil];
    [self.view addGestureRecognizer:[self createPanGestureRecognizer]];
}

- (UIPanGestureRecognizer *) createPanGestureRecognizer {
    SGFPanGestureRecognizer * panRecognizer = [[SGFPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognized:)];
    return panRecognizer;
}

-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if(self.viewControllers.count == 1)
        if(self.view.gestureRecognizers && self.view.gestureRecognizers.count>0)
            for (UIGestureRecognizer * recog in self.view.gestureRecognizers)
            {
                if([recog isKindOfClass:[SGFPanGestureRecognizer class]]) {
                    [self.view removeGestureRecognizer:recog];
                    break;
                }
            }
    [super pushViewController:viewController animated:animated];
}

-(UIViewController *)popViewControllerAnimated:(BOOL)animated {
    UIViewController * vc = [super popViewControllerAnimated:animated];
    if(self.viewControllers.count == 1)
        [self.view addGestureRecognizer:[self createPanGestureRecognizer]];
    return vc;
}

Все работает нормально, кроме одного: когда я нахожусь в detailViewController, и я провожу пальцем слева, VC запускает анимацию "POP", которая проходит вдоль моего пальца. Если я оставлю жест слишком быстрым, detailViewController на самом деле не выскочит и откатит всплывающую анимацию. Тем не менее, это действие запускает popViewControllerAnimated и моя логика выше становится бесполезной.

РЕЗЮМЕ: Так есть ли способ понять, если жест смахивания к спине выпущен слишком рано, чтобы действительно вытолкнуть UINavigationController?

0 ответов