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; }