PanGestureRecognizer не срабатывает в UIScrollView при использовании SWRevealController

Я использую проект SWRevealViewController Джона Люха для своего приложения и столкнулся с одной незначительной проблемой. Что я не могу понять прямо.

Я использую SWRevealViewController для доступа к меню параметров моего приложения из любого места в моем приложении, просто проводя пальцем вправо, и слайды основного представления раскрывают меню позади него.

Это обрабатывается распознавателем жестов смахивания, который добавляется к основному виду. Чтобы улучшить UX, я создаю кнопку, закрывающую основное представление, когда оно смахивается в сторону, поэтому все, что нужно сделать пользователю, чтобы закрыть меню, — это коснуться небольшой части отображаемого представления или взять представление и потянуть его. назад.

Он отлично работает, за исключением одного из моих представлений, в котором большая часть представления представляет собой UIScrollView. Чтобы заставить его работать, мне нужно добавить распознаватель жестов в UIScrollView, а также в суперпредставление. Но по какой-то причине, как только представление смахивается в сторону, распознаватель жестов смахивания перестает отвечать. Но это происходит только в представлении, где большая часть экрана представляет собой представление прокрутки, поэтому то, что пользователь захватывает, чтобы оттянуть экран назад, является представлением прокрутки.

Надеюсь, это было понятно. Любой свет, который вы, ребята, можете пролить на это, будет очень полезен.

-(void)viewDidAppear:(BOOL)animated {
    // so the user can tap the button to show the menu
    [menuButton addTarget:self.revealViewController action:@selector(revealToggle:) forControlEvents:UIControlEventTouchUpInside];

    // so the user can swipe to show the menu
    [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

    // so the user can swipe the scrollview to show the menu
    [mainScrollView addGestureRecognizer:self.revealViewController.panGestureRecognizer];

    self.revealViewController.delegate = self;
}

- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position {
    if (position == FrontViewPositionRight) {
        //create the button so the use can tap to close the menu
        returnButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

        [returnButton addTarget:self.revealViewController action:@selector(revealToggle:) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:returnButton];
    } else {
        [returnButton removeFromSuperview];
        returnButton = nil;
    }
}

введите здесь описание изображения


person Sev    schedule 23.01.2015    source источник


Ответы (1)


Итак, я только что обнаружил, что эта проблема уже решена в рамках проекта SWRevealViewController. Это сообщение указало мне правильное направление . Они добавили распознаватель жестов касания, который имеет поведение, которое я создал с помощью динамически созданной кнопки.

Добавление

[self.view addGestureRecognizer:self.revealViewController.tapGestureRecognizer];

устраняет необходимость в кнопке, что позволяет представлению реагировать на оба распознавателя.

person Sev    schedule 23.01.2015