Отменить сенсорные события для других представлений

У меня есть UIView subclass, который отображает некоторый контент поверх camera preview (AR, но не ARKit). В этом представлении я использую touchesBegan и touchesEnded, чтобы определить, нажимал ли пользователь на отображаемые объекты. Теперь у меня есть этот вид embedded в controller внутри UINavigationController, а в этом NavigationController включено отображение/скрытие полос при нажатии. Я хотел бы сделать так, чтобы, если я обнаруживал нажатие на объект внутри ARView, я мог выполнить какое-то действие, но тогда касания не принимались NavigationController, поэтому полосы скрывались, только если я нажимаю на фон. Как я могу заблокировать дальнейшую отправку сенсорных событий в такой ситуации?


person Damian Dudycz    schedule 03.10.2018    source источник


Ответы (2)


Итак, если я вас правильно понял, вы хотите распознавать оба события и вызывать методы обоих жестов, верно? Если это так, попробуйте этот фрагмент кода:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

Этот метод позволяет распознавать несколько жестов

person Bliss    schedule 03.10.2018
comment
Ну не всегда. На данный момент это уже работает таким образом - я получаю оба обнаруженных касания Ended в моем подпредставлении, а также скрываются панели на навигационном контроллере. Я хочу иметь возможность каким-то образом заблокировать эти полосы, чтобы скрыть, если мое касание подвида было в особом месте подвида. Я не реализовывал касания NavigationController, это делает SDK, я просто выбрал некоторые параметры в раскадровке. Таким образом, я хочу иметь возможность ограничивать касания только моим подвидом, но не всегда - только если я решу это после обнаружения касаний. Также я не использую GestureRecognizers, просто touchesBegan и touchesEnded. - person Damian Dudycz; 03.10.2018
comment
На самом деле я думаю, что я мог бы изменить свой код, чтобы использовать распознаватель жестов, и тогда это могло бы работать. Спасибо. - person Damian Dudycz; 03.10.2018

Если вы хотите ограничить количество касаний в разных представлениях, вы можете изменить свойство userInteractionEnabled для каждого условия, которое вам нравится.

Если для этого свойства задано значение false, для выбранных представлений не будут приниматься события касания.

person Mohamad Sheikh    schedule 03.10.2018