Жест панорамирования мешает UISlider - PullRequest
11 голосов
/ 07 марта 2012

Я пытаюсь создать скользящее меню (вроде как в приложениях Facebook / Twitter), и моя версия успешно использует жесты панорамирования для этого эффекта.Класс называется «SlideMenu».

Я создаю экземпляр SlideMenu в моем ViewController, а затем добавляю в него несколько элементов пользовательского интерфейса в виде подпредставлений, таких как UISliders, UIButtons и т. Д.* Проблема в том, что жест панорамирования, кажется, мешает UISlider, поскольку он будет скользить, но останавливаться после очень короткого расстояния.Я нашел фрагмент кода в ответе ( Проблема с жестами: UISwipeGestureRecognizer + UISlider ), однако я не уверен, как его реализовать или работает ли он с моим дизайном.

Код такой:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isKindOfClass:[UISlider class]]) {
        // prevent recognizing touches on the slider
        return NO;
    }
    return YES;
}

Я пытался добавить его в свой класс SliderMenu и мой ViewController, но без кубиков.Куда это идет?Какой делегат мне нужно установить (если есть?) Спасибо

Ответы [ 2 ]

14 голосов
/ 07 марта 2012

По сути, в каком бы контроллере или представлении вы не работали с распознавателем жестов. Когда вы создаете распознаватель жестов, вы можете установить его делегат для какого-либо объекта (возможно, вашего контроллера представления) и заставить этот объект реализовать UIGestureRecognizerDelegate. Один из обратных вызовов делегата - gestureRecognizer:shouldReceiveTouch, поэтому вам просто нужно скопировать код, который вы поместили выше, в реализацию вашего объекта (контроллера представления).

0 голосов
/ 31 октября 2018

У меня также были некоторые проблемы с этим, источник моей проблемы состоял в том, что свойство

gestureRecogniser.cancelsTouchesInView

по умолчанию true, что вызвало странный эффект задержки на моемUISlider при попытке его перетащить.Это решено

gestureRecogniser.cancelsTouchesInView = false

пс .: также убедитесь, что для delaysTouchesBegan, delaysTouchesEnded установлено значение false

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