带有setDelegate和action的UIGestureRecognizer

时间:2012-05-10 13:00:14

标签: iphone ios xcode uitableview uigesturerecognizer

我正在尝试将UIPanGestureController添加到我的UITableView中,这样我就可以检测用户是手动平移还是只是初步启动并自行观看视图滚动。原因是我想在滚动速度减慢时立即捕捉到一个单元格(想象一下幸运之轮)。当然,我不想在用户手动平移时捕捉。

但是,我可以使用手势控制器(并相应地设置我的“手动滚动”变量“)或滚动视图。 使用TouchBegin事件而不是手势识别器会引入新问题,因此这不是一个真正的选择。

首先,我更改了表视图以包含UIGestureRecognizerDelegate。

初始化视图后,我会......

panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panTableView:)];
[panGestureRecognizer setDelegate:self];
[self.view addGestureRecognizer:panGestureRecognizer];

我实现了Begin函数,设置BOOL:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer
{
  isPanning = YES;
  return NO;
}

始终返回NO应该确保手势识别器从不活动,因为我希望(并且需要)使用表视图自己的滚动方法。

问题:我的动作“panTableView”永远不会被调用。 如果我设置委托,则会调用该操作,但我无法滚动,因为手势识别器会捕获所有触摸。

我已经调查了目标。设置委托后,手势识别器的视图和委托指针与self.view相同,操作仍然使用正确的选择器指向self。

1 个答案:

答案 0 :(得分:0)

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer
{
  isPanning = YES;
  return YES;
}

并实施此

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
  return YES
}