【问题标题】:UIPanGestureRecognizer interception on SideMenu and UIPageViewControllerSideMenu 和 UIPageViewController 上的 UIPanGestureRecognizer 拦截
【发布时间】:2016-04-25 23:48:07
【问题描述】:

我在向右滑动时出现了 leftMenu,我希望在向左滑动整个页面时改变我的标签。

他们的 UIPanGestureRecognizer 拦截,我试过禁用 UIPageViewController 的 UIScrollView 的弹跳,试过 requireGestureRecognizerToFail:

但我无法让它们都起作用。我想要的是当它被滑动到右侧菜单时出现。侧边菜单打开时向左滑动会关闭,否则页面会改变。

我的示例代码如下;

 for(UIScrollView *view in self.pageViewController.view.subviews)
 {
    if ([view isKindOfClass:[UIScrollView class]])
    {
       UIScrollView *scrollView = (UIScrollView *)view;

       AppDelegate *appDel = [UIApplication sharedApplication].delegate;

       UIPanGestureRecognizer* panGestureRecognizer = scrollView.panGestureRecognizer;
       [panGestureRecognizer addTarget:self action:@selector(move:)];
       [panGestureRecognizer requireGestureRecognizerToFail:appDel.slidingViewController.panGesture];
    }
 }

提前致谢

【问题讨论】:

    标签: ios objective-c uiscrollview uipageviewcontroller uipangesturerecognizer


    【解决方案1】:

    类似下面的东西应该可以工作(警告:未经测试!)

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panRecognized:)];
        panRecognizer.delegate = self;
    
        for (UIGestureRecognizer *recognizer in self.pageViewController.gestureRecognizers)
            [recognizer requireGestureRecognizerToFail:panRecognizer];
    }
    
    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)recogniser
    {
        if (self.leftMenuShowing)
            return YES;
        else
        {
            UIPanGestureRecognizer *panRecognizer = (id)recognizer;
            CGPoint translation = [panRecognizer translationInView:self.view];
            return (translation.x > 0);
        }
    }
    
    - (void)panRecognized:(UIPanGestureRecognizer *panRecognizer)
    {
        if (state == UIGestureRecognizerStateBegan || state == UIGestureRecognizerStateChanged)
        {
            // if pan is to left, move leftMenu offscreen
            // if pan is to right, move leftMenu onscreen
        }
        else
        {
            // if leftMenu is mostly onscreen, animate completely onscreen
            // if leftMenu is mostly offscreen, animate completely offscreen
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多