如何将 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 使用其识别器进行反弹?