根据我对问题的理解,只有在 tableView 滚动时,我们才想更改默认行为。所有其他行为将是相同的。
子类UITableView
。UITableView
s 是UIScrollView
s 的子类。在UITableView
子类上实现一个 UIScrollView
人UIGestureRecognizer
的委托方法
- (BOOL)gestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UISwipeGestureRecognizer *)otherGestureRecognizer
{
//Edit 1
//return self.isDecelerating;
//return self.isDecelerating | self.bounces; //If we want to simultaneous gesture on bounce and scrolling
//Edit 2
return self.isDecelerating || self.contentOffset.y < 0 || self.contentOffset.y > MAX(0, self.contentSize.height - self.bounds.size.height); // @Jordan edited - we don't need to always enable simultaneous gesture for bounce enabled tableViews
}
因为我们只想在 tableView 减速时更改默认手势行为。
现在将所有 'UITableView' 类更改为新创建的 tableViewSubClass 并运行项目,滑动应该在 tableView 滚动时工作。:]
但是当 tableView 滚动时,滑动看起来有点太敏感了。让我们对滑动进行一些限制。
子类UIScrollView
。在UIScrollView
子类上实现另一个UIGestureRecognizer
的委托方法gestureRecognizerShouldBegin:
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
CGPoint velocity = [(UIPanGestureRecognizer *)gestureRecognizer velocityInView:self];
if (abs(velocity.y) * 2 < abs(velocity.x)) {
return YES;
}
}
return NO;
}
我们想让“滑动明显是水平的”。上面的代码仅在 x 轴上的手势速度是 y 轴上的两倍时才允许手势开始。[如果您愿意,请随意增加硬编码值“2”。滑动需要更水平的值越高。]
现在将“UiScrollView”类(它有多个 TableView)更改为您的 ScrollViewSubClass。运行项目。:]
我在 gitHub 上做了一个项目https://github.com/rishi420/SwipeWhileScroll