如何将 panGestureRecognizer 添加到 TableView,并且在识别平底锅时仍然让 tableview 滚动?

Posted

技术标签:

【中文标题】如何将 panGestureRecognizer 添加到 TableView,并且在识别平底锅时仍然让 tableview 滚动?【英文标题】:How can I add a panGestureRocgnizer To a TableView, and still have the tableview scroll while recognizing pans right? 【发布时间】:2015-06-13 05:38:53 【问题描述】:

我正在使用 ECSlidingViewController(github hamburger-menu/slide-out menu 项目)。

我有一个 TableViewController,我需要将以下内容添加到我的 TableViewController。

        ECSlidingViewController *ecsVC = (ECSlidingViewController *)viewController;
        ecsVC.panGesture.delegate = self;
        [self.view addGestureRecognizer:ecsVC.panGesture];

我不能这样做self.navigationcontroller.view addGestu...,因为如果我推送一个视图,那么我仍然会得到我不想要的 pangesture 功能。我只希望它出现在这一视图中。

所以我必须这样做self.VIEW addGest...。但是,一旦我这样做,tableView 就会停止滚动。

如果我向右平移手指,汉堡菜单会滑出,但正如我所说,我的 tableview 不会滚动。

所以,我尝试使用- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch ,但我不确定我是否正确使用它。

如果我返回 YES,我的汉堡菜单会滑出,但我的 tableview 不起作用/滚动。如果我返回 NO,则汉堡菜单不起作用/滑出,但 tableView 起作用。

所以我需要区分这两者并相应地返回YES/NO。

但是,我怎样才能区分它们呢?

我不能在 panGesture 上使用目标/动作,因为这样-gestureRecognizer:shouldReceiveTouch 永远不会被调用(这意味着我不能让 tableview 滚动)。如果我将gestureRecognizer 转换为-gestureRecognizer:shouldReceiveTouch 中的UIPanGestureRecognizer,并使用-velocityInView,因为我只得到初始点击。所以我只能得到 0.0 的 X 和 Y。

在这种情况下如何识别用户是否向左滑动?

【问题讨论】:

【参考方案1】:

试试这个:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer 
    CGPoint translation = [gestureRecognizer translationInView:self.view];

    if (ABS(translation.x) > ABS(translation.y)) 
        return YES;
    

    return NO;

【讨论】:

以上是关于如何将 panGestureRecognizer 添加到 TableView,并且在识别平底锅时仍然让 tableview 滚动?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 panGestureRecognizer 启用 collectionView 分页

将 trailingSwipeActionsConfigurationForRowAt 与 panGestureRecognizer 与 Swift 一起使用

对于 UIScrollview,我如何使用自己的 panGestureRecognizer 但允许 scrollView 使用其识别器进行反弹?

AVPlayer seektotime with Pangesturerecognizer

PanGestureRecognizer 的有限区域

在 iOS 中,为啥拖过 UIImageView 不会结束 PanGestureRecognizer?