1

Я использую awesome SWRevealViewController project by John Lluch для моего приложения, и у меня он работает отлично. Я столкнулся с одной из второстепенных проблем, которые, похоже, не могут пробиться. Это объяснение похоже на длинный, но голый со мной, и я постараюсь быть кратким, насколько это возможно.PanGestureRecognizer не запускает UIScrollView при использовании SWRevealController

Я использую 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; 
    } 
} 

enter image description here

ответ

0

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

Добавление

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

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