Как передать прикосновения к подпредставлению с помощью распознавателя жестов в родительском представлении Swift - PullRequest
0 голосов
/ 04 марта 2019

У меня следующий случай.parentView имеет свой собственный gestureRecognizerA и имеет подпредставление subView, которое имеет свой собственный UITapGestureRecognizer.Есть ли способ сказать parentView, что он должен передавать события касания, распознаваемые в gestureRecognizerA, на subView, если эти события касания находятся в границах subView?

gestureRecognizerA очень специфично,Это пользовательский распознаватель жестов для распознавания кругового движения.Это признание должно произойти во всех областях parentView.Однако, когда тот же самый распознаватель жестов распознает касание, он должен передать это касание subView.

enter image description here

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Кажется, вы просто хотите, чтобы оба этих распознавателя жестов работали одновременно.Просто внедрите UIGestureRecognizerDelegate для вашего parentView и сделайте его tapGestureRecognizer и gestureRecognizerA делегатом.Затем реализуйте дополнительный метод там:

// MARK: - UIGestureRecognizerDelegate

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

, который может быть в состоянии обнаружить касание в subView даже при выполнении кругового движения в пределах parentView.

ОБНОВЛЕНИЕ: При использовании распознавателей жестов "переадресация" будет означать простой вызов метода другого распознавателя.Просто укажите в качестве параметра распознаватель, который выполняет пересылку.

Например, tapGestureRecognizer запускает viewWasTapped(_ sender: UITapGestureRecognizer) при обнаружении касания.Теперь, когда ваш gestureRecognizerA хочет перенаправить свои события на tapGestureRecognizer, он просто делает это, вызывая:

subView.viewWasTapped(self.gestureRecognizerA)

С очевидным изменением самого метода:

func viewWasTapped(_ sender: UIGestureRecognizer) {
    // ...
}

Это работает для UITapGestureRecognizer.Отправителем может быть любой другой UIGestureRecognizer, и у вас все еще будет почти вся информация, чтобы разрешить жест касания.

0 голосов
/ 04 марта 2019

Вы можете легко определить точки касания.Как, например, у вас есть жест касания в родительском классе как:

let tapGR = UITapGestureRecognizer(target: self, action: #selector(tapped))
view.addGestureRecognizer(tapGR)

@objc func tapped(gr:UITapGestureRecognizer) {
    let loc:CGPoint = gr.location(in: gr.view)  
    //insert your touch based code here
}

Внутри метода прослушивания вы можете определить место, где произошел касание, поэтому после проверки границ подпредставления с местоположением касания вы можете проверитьпостукивание произошло в рамках подпредставления или нет.

...