Jor*_*ith 25 objective-c uitableview uiscrollview ios
以下是滚动视图的工作方式:一个滚动视图是在水平方向上启用分页.此滚动视图的每个"页面"都包含一个垂直滚动的UITableView.没有修改,这可行,但不完美.
不正确的行为:当用户在桌面视图上上下滚动,但是想要快速翻到下一页时,水平轻拂/滑动最初不会起作用 - 在桌面视图静止之前它将无法工作(即使滑动非常明显水平).
它应该如何工作:如果滑动显然是水平的,我希望页面改变,即使表视图仍然滚动/弹跳,因为这也是用户期望的.
我怎样才能改变这种行为 - 最简单或最好的方法是什么?
注意由于各种原因,某些答案中所述的UIPageViewController将不起作用.如何使用交叉方向UIScrollViews(/ one是一个表视图,但你明白了)?我一直在墙上撞了几个小时 - 如果你认为你可以做到这一点,那么我会更乐意奖励一笔赏金.
War*_*shi 18
根据我对这个问题的理解,只有在tableView滚动时我们才想改变默认行为.所有其他行为都是一样的.
子类UITableView.UITableViews是UIScrollViews的子类.在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
}
Run Code Online (Sandbox Code Playgroud)
因为我们只想在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;
}
Run Code Online (Sandbox Code Playgroud)
我们想让"滑动显然是横向的".如果x轴上的手势速度是y轴上的手势速度,则上面的代码仅允许手势开始.[如果您喜欢,请随意增加硬编码值"2".刷卡需要更高的水平值.]
现在将`UiScrollView'类(具有多个TableView)更改为ScrollViewSubClass.运行该项目.:]

我在gitHub上创建了一个项目https://github.com/rishi420/SwipeWhileScroll
| 归档时间: |
|
| 查看次数: |
3318 次 |
| 最近记录: |