UITableView滑动手势需要接近完美的准确性

我正在使用自定义UITableViewCell子类的UITableView自定义刷卡事件。 我在头中包含了UIGestureRecognizerDelegate ,并在viewDidLoad:有这个viewDidLoad:

 UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; swipeLeft.numberOfTouchesRequired = 1; [self.tableView addGestureRecognizer:swipeLeft]; 

我的swipeLeft方法看起来像这样:

 -(void)didSwipe:(UISwipeGestureRecognizer *)recognizer { if (recognizer.state == UIGestureRecognizerStateEnded) { CGPoint swipeLocation = [recognizer locationInView:self.tableView]; NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation]; NSDictionary *clip = [self.clips objectAtIndex:swipedIndexPath.row]; NSLog(@"Swiped!"); } } 

这是有点工作,但刷卡必须非常精确。 像几乎不可能的精确。

我几乎通过使用UIPanGestureRecognizer来解决这个问题,但不幸的是,对于使用全局平移手势识别器的全局侧面抽屉组件(对于那些感兴趣的人来说,ECSlidingViewController)并没有很好的解决方法。

有没有办法解决? 任何帮助将不胜感激,因为我一直在search和浏览几个小时寻找解决scheme。

正如Kolin Krewinkel在Twitter上所指出的那样,实施这两个委托方法的窍门是:

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

我有一个类似的问题,使用ECSlidingViewController和UITableView上的滑动删除(在我的情况下顶视图控制器幻灯片左侧显示菜单)。

我通过向panGesture的默认panGesture属性添加一个委托来解决这个问题,如果在屏幕的右侧边缘开始滑动,就只能拉菜单:

 -(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { if ([gestureRecognizer locationInView:gestureRecognizer.view].x > ([UIScreen mainScreen].bounds.size.width - 60.0)) { return YES; } return NO; }