使用SWRevealController时,PanGestureRecognizer无法在UIScrollView上触发

时间:2015-01-23 07:53:48

标签: ios xcode uiscrollview uipangesturerecognizer swrevealviewcontroller

我正在使用SWRevealViewController project by John Lluch作为我的申请,我遇到了一个小问题,我似乎无法直截了当。

我正在使用SWRevealViewController从我的应用程序的任何位置访问我的应用程序选项菜单,只需向右滑动,主视图滑动即可显示其背后的菜单。

这是由添加到主视图的滑动手势识别器处理的。为了改善用户体验,我创建了一个按钮来覆盖主视图,当它被轻扫时,所以用户关闭菜单所要做的就是点击显示的视图的小部分或抓住视图并拉动它背部。

它的效果很好,除了我的一个视图,其中大部分视图是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

1 个答案:

答案 0 :(得分:0)

所以我刚刚发现SWRevealViewController项目已经解决了这个问题。 This post指出了我正确的方向。他们添加了一个轻敲手势识别器,它具有我用动态创建的按钮创建的行为。

添加

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

删除了对按钮的需要,从而允许视图响应两个识别器。