У меня есть UITableView
, который я представляю в UIPopoverController
.В табличном представлении представлен список элементов, которые можно перетаскивать на основной вид.
Когда пользователь начинает жест панорамирования, который вначале преимущественно вертикальный, я хочу, чтобы UITableView
прокручивался как обычно,Когда он изначально не является в основном вертикальным, я хочу, чтобы приложение интерпретировало его как действие перетаскивания.
Мой, к сожалению, долгий путь по этому пути заставил меня создать собственный UIGestureRecognizer
.Пытаясь понять основы, я сначала оставил этот пользовательский жест как пустую реализацию, которая просто вызывает супер версию каждого из пяти пользовательских методов, которые, по словам Apple, должны быть переопределены:
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
(void)reset;
Это приводит к тому, что ничего не происходит, то есть метод действия пользовательского жеста никогда не вызывается, и табличное представление прокручивается как обычно.
Для моего следующего эксперимента я установил состояние жеста на UIGestureRecognizerStateBegan
в методе touchesBegan
.
Это вызвало срабатывание метода действия жеста, в результате чего жест, похоже, ведет себя так же, как стандартный UIPanGestureRecognizer
.Это, очевидно, говорит о том, что я отвечаю за управление состоянием жеста.
Затем я установил состояние жеста на UIGestureRecognizerStateChanged
в методе touchesMoved
.Все по-прежнему хорошо.
Теперь вместо этого я попытался установить состояние жеста на UIGestureRecognizerStateFailed
в методе touchesMoved
.Я ожидал, что это завершит жест и восстановит поток событий в табличном представлении, но этого не произошло.Все, что он сделал, это прекратил запуск метода действия жеста.
Наконец, я установил состояние жеста на UIGestureRecognizerStateFailed
в методе touchesBegan
, сразу после того, как я установил его на UIGestureRecognizerStateBegan
.
Это заставляет жест запускать метод действия ровно один раз, а затем передавать все последующие события в табличное представление.
Итак ... извините за такой длинный вопрос ... но почему, если я вызываюжест с ошибкой в методе touchesBegan
(после первого задания состояния UIGestureRecognizerStateBegan
) перенаправляет события в табличное представление, как и ожидалось.Но если я попробую ту же технику в touchesMoved
(единственное место, где я могу обнаружить, что движение в основном вертикальное), почему не происходит такое перенаправление?