Отменить текущее касание UIScrollView

У меня есть UIScrollView с несколькими подпредставлениями и так далее. Я также delegate ScrollView и реализовал - (void)scrollViewDidScroll:(UIScrollView *)scrollView. Под моим свитком есть еще один вид.

Я хочу показать это представление, если contentOffset scrollView опускается ниже 50 пикселей по оси x, «сбрасывает» contentOffset scrollView и отменяет текущий жест scrollView, чтобы пользователь не манипулировал его содержимым при появлении нового представления.

Я реализовал метод так:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x < -50)
    {
        scrollView.contentOffset = CGPointZero;
        [self showBackView];
        //here I want to cancel the current touch on the scrollview since it keeps scrolling if I drag my finger
    }
}

Я попытался установить для свойства userInteractionEnabled значение NO, но оно вступает в силу только после завершения касания. И я пробовал кучу других свойств, но ни одно из них не работает.

Как я могу это исправить?


person Majster    schedule 28.08.2013    source источник
comment
Вы пытались установить scrollEnabled на НЕТ?   -  person Matthias Bauch    schedule 29.08.2013
comment
Да, это не сработало. Отключение распознавателя жестов панорамирования делает свою работу.   -  person Majster    schedule 29.08.2013


Ответы (1)


Попробуйте отключить panGestureRecognizer для просмотра прокрутки (а затем снова включите его). Это отменит текущий сеанс распознавателя:

ObjC

self.scrollView.panGestureRecognizer.enabled = NO;
self.scrollView.panGestureRecognizer.enabled = YES;

Быстрый

self.scrollView.panGestureRecognizer.isEnabled = false
self.scrollView.panGestureRecognizer.isEnabled = true
person Wain    schedule 28.08.2013
comment
Это здорово. У меня был сценарий с UITableView с UIRefreshControl, который при опускании выполнял вызов API. В случае ошибки вызова API появлялось диалоговое окно с предупреждением. Проблема заключалась в том, что ваше касание все еще было на UITableView, поэтому вы могли взаимодействовать и вызывать другой вызов API, который нам не нужен. Теперь, когда событие касания UITableViews отменено, пользователь не может взаимодействовать с базовым табличным представлением из-за предупреждения. - person micnguyen; 13.02.2017