【发布时间】:2011-11-09 23:14:20
【问题描述】:
我编写了一个 UIScrollView 子类,用于滚动一系列 UITableView。见下图:
如您所见,我有几个垂直滚动的 UITableView,它们在父 UIScrollView 内水平滚动。这一切都很好。然而,该应用程序有许多全局 手势。例如,如果我用 2 根手指向给定方向滑动,我会执行 UIView 转换到应用程序的另一部分。但是如果我在滚动视图和/或其子表视图顶部做手势,它们自然会滚动它们的内容。这看起来不太好,并且会导致一些布局问题。
我想弄清楚的是,当用户用两根手指且仅用两根手指触摸 anywhere 时,如何禁用 UIScrollView 及其子 UITableViews 上的所有滚动。我已经尝试过覆盖 touchesBegan、touchesEnded、touchesShouldCancel 等的变体……但我不能完全正确。非常感谢任何帮助。
这是我的手势处理代码:
UISwipeGestureRecognizer *twoFingerSwipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleTwoFingerSwipe:)];
[twoFingerSwipeUp setNumberOfTouchesRequired:2];
[twoFingerSwipeUp setDirection:UISwipeGestureRecognizerDirectionUp];
[twoFingerSwipeUp setDelegate:self];
// 'self' is the superview of the UIScrollView, which is a UIView.
[self addGestureRecognizer:twoFingerSwipeUp];
[twoFingerSwipeUp release];
// ... repeat the above code for up, down, left, right gestures ...
- (void)handleTwoFingerSwipe:(UISwipeGestureRecognizer*)swipeGesture {
switch ([swipeGesture direction]) {
case UISwipeGestureRecognizerDirectionUp:
[self changeToView:viewAbove];
break;
case UISwipeGestureRecognizerDirectionDown:
[self changeToView:viewBelow];
break;
case UISwipeGestureRecognizerDirectionRight:
[self changeToView:viewToTheRight];
break;
case UISwipeGestureRecognizerDirectionLeft:
[self changeToView:viewToTheLeft];
break;
}
}
【问题讨论】:
标签: ios uitableview uiscrollview gestures