Прерывание прокрутки / анимации UIScrollView с помощью UIGestureRecognizer - PullRequest
2 голосов
/ 28 апреля 2011

У меня есть UIScrollView и UITapGestureRecognizer, которые довольно просты, и заставили их работать вместе всеми возможными способами, кроме одного. UIScrollView не использует масштабирование, а UITapGestureRecognizer сейчас только пишет в консоль.

Я могу получить UITapGestureRecognizer для записи на консоль, когда нажата UIScrollView, либо во время стоянки, либо во время анимации через setContentOffset, но я не могу заставить его работать, когда UIScrollView движется из-за того, что спер. Когда UIScrollView проведен и все еще находится в движении, первое касание после касания остановит его движение, а затем UITapGestureRecognizer подхватит только второе нажатие. Я надеюсь получить первое касание, чтобы остановить прокрутку UIScrollView, а также записать на консоль через UITapGestureRecognizer.

Я надеюсь, что моя проблема здесь только из-за пробела в моих знаниях либо UIScrollView, либо UITapGestureRecognizer, и есть просто свойство, которое можно установить, чтобы это исправить, но пока никакое количество чтения не помогло мне Эта проблема. Любые идеи о том, возможно ли это?

Редактировать: Спасибо за предложения, см. Ниже

Извинения, я не думаю, что объяснил себя очень хорошо. Я понимаю, что первое движение на стационарном UIScrollView - это движение (которое в моем случае обрабатывается UIScrollView кстати, а не распознавателем жестов).

Проблема заключается в том, что после считывания и отпускания, если вы нажмете , пока он все еще находится в движении (и никакое другое касание не выполняется), он не будет воспринят UITapGestureRecognizer, вместо этого он выбирается только UIScrollView и останавливает движение UIScrollView. Если вы позволите ему замедлиться, а затем нажмите, это работает нормально. Также, если он движется из-за анимации, но не смахивания, тап также работает нормально.

То же самое при использовании UILongPressGestureRecognizer, который я и хочу использовать в идеале, но подумал, что если я не смогу заставить его работать с тапом, у меня нет шансов с этим!

Ответы [ 2 ]

4 голосов
/ 28 апреля 2011

Похоже, вам нужно реализовать

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

метод делегирования для UITapGestureRecognizer и возврат YES для UIGestureRecognizers, с которым вы хотите интерпретировать жесты касания синхронно с.

e.x.

// Somewhere in your code...
UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
tap.delegate = self;
[self.view addGestureRecognizer:tap];
[tap release];

// And the delegate method...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
        return YES;
}

n.b. Возможно, вы захотите быть более разборчивым, решая, с каким UIGestureRecognizer(s) вы хотите работать синхронно. Пример будет работать с любым другим распознавателем жестов.

0 голосов
/ 28 апреля 2011

Проблема в том, что когда пользователь впервые нажимает scroll UIScrollView, это не tap , это swipe . Это будет считаться касанием только тогда, когда пользователь касается и отпускает палец практически в том же положении (без перетаскивания пальца по экрану).

Что вы можете сделать, чтобы решить вашу проблему: используйте UIScrollView метод делегата scrollViewWillBeginDragging, и тогда вы узнаете, когда пользователь только что нажал и начнет перетаскивать представление прокрутки, а также добавьте UITapGestureRecognizer для этих реальных краны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...