Я написал подкласс UIScrollView, который я использую для прокрутки серии UITableView. Смотрите следующую диаграмму:
Как видите, у меня есть несколько вертикально прокручиваемых UITableView, которые прокручиваются горизонтально внутри родительского UIScrollView. Это все отлично работает. Однако в приложении есть несколько жестов global . Например, если я проведу пальцем в указанном направлении двумя пальцами, я сделаю переход UIView к другой части приложения. но если я делаю жест поверх представления прокрутки и / или его дочерних табличных представлений, они естественным образом прокручивают свое содержимое. Это не выглядит хорошо и вызывает некоторые проблемы с макетом.
Я хотел бы выяснить, как отключить всю прокрутку как для UIScrollView, так и для его дочерних UITableView, когда пользователь касается в любом месте двумя пальцами и только двумя пальцами. Я пробовал варианты переопределения касаний Beg, touchesEnded, touchShouldCancel и т. Д., Но я не могу сделать это совершенно правильно. Любая помощь очень ценится.
Вот мой код обработки жестов:
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;
}
}