Проблемы со смахиванием вправо с помощью UISwipeGestureRecognizer (Swift 3.0)

После просмотра этой быстрой демонстрации я настроил очень похожие методы swipeLeft и swipeRight. Я удостоверился, что два распознавателя жестов, которые я добавил в сцену, были установлены на «левый» и «правый» соответственно, и проверил, что мои @IBActions связаны с правильными распознавателями.

По какой-то причине распознаватель смахивания влево работает, а смахивание вправо — нет (что еще более странно, поскольку большая часть того, что я читаю, обсуждает, как направления распознавателя по умолчанию устанавливаются вправо). Я тестировал это на iPhone 8 и симуляторе (SE + 10).

Когда я использую термины «влево» и «вправо», я предполагаю, что они означают направление движения (например, влево = начиная с правой стороны и двигая пальцем влево).

Мои методы следующие:

@IBAction func swipeLeft(_ sender: UISwipeGestureRecognizer) {
    print("swiped left")
}

@IBAction func swipeRight(_ sender: UISwipeGestureRecognizer) {
    print("swipe right")
}

(R) не работает...

ОБНОВЛЕНИЕ

Оба пузырька слева от IBActions (используемые для подключения к контроллеру представления) заполнены. Когда я нажимаю на них (пытался сделать снимок экрана, но он исчезает), они оба показывают, что они подключены (соответственно):

Main.storyboard -- Swipe Gesture Recognizer (R)
Main.storyboard -- Swipe Gesture Recognizer (L)

Однако, когда я щелкаю правой кнопкой мыши по распознавателям, их соединения различаются. Они оба показывают отправленные действия для соответствующих методов, но у (L) есть Referencing Outlet Collections, а у (R) нет.

После подключения все работает. Не знаю, почему он не подключался изначально, но это решило проблему. Спасибо всем за помощь.


person Mercutio    schedule 25.10.2017    source источник


Ответы (1)


Я не знаю, перетащили ли вы его на вид, который должен слушать жест. Проверьте панель ссылок, чтобы увидеть различия между ними и связь между правильным жестом с представлением. Возможно, первый распознаватель жестов отключает второй, попробуйте отключить первый и посмотрите, поможет ли это. Вы должны настроить их для пересылки касаний другим распознавателям.

РЕДАКТИРОВАТЬ: как вы сказали, вы должны были добавить соединение со ссылками на розетки. Рад, что смог вам помочь (у меня была эта проблема в прошлом), удачи!

person Yitzchak    schedule 25.10.2017
comment
Как я уже сказал, я снова подключился и проверил, что они были связаны с правильным жестом. Я также скорректировал порядок, если это имело значение. Хотя в демонстрационном ролике им не нужно было ничего подобного делать. - person Mercutio; 25.10.2017
comment
Вы проверили, что они пересылают касания? - person Yitzchak; 25.10.2017
comment
Помимо направления смахивания, оба распознавателя настроены одинаково. Не уверен, как проверить, что они оба пересылают касания... - person Mercutio; 25.10.2017
comment
Поэтому я переключил их обоих налево, и первый распознаватель (исходный правый) все еще не работает... - person Mercutio; 25.10.2017
comment
Отключите левый, чтобы он не получал событие касания, а затем посмотрите, работает ли правый. - person Yitzchak; 25.10.2017
comment
Можете ли вы распечатать в отладке свойствоgestRecognizersпредставления? Сколько у него есть? - person Yitzchak; 25.10.2017
comment
Распознаватель (R) не имел связи с выходными точками. Ваш совет помог мне осознать это. Если вы хотите изменить свой ответ, чтобы он отражал то, что я написал в обновлении, я отмечу его как правильный. Спасибо. - person Mercutio; 25.10.2017