![](/img/trans.png)
[英]Passing touches to parent view controller after finish of Gesture recognizer
[英]how to pass touches to subview with gesture recognizer in parent view swift
我有以下情況。 parentView
擁有自己的gestureRecognizerA
並且具有子視圖subView
,后者具有自己的UITapGestureRecognizer
。 是否有任何方法告訴parentView
如果這些觸摸事件在subView
的范圍之內,則應將其在gestureRecognizerA
識別的觸摸事件gestureRecognizerA
給subView
?
gestureRecognizerA
非常具體。 它是用於識別圓周運動的自定義手勢識別器。 這種識別應該發生在parentView
所有區域。 但是,當同一手勢識別器識別到輕subView
,應將其傳遞給subView
。
您可以輕松識別出點擊點。 例如,您在父類中有一個輕擊手勢,如下所示:
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
}
在點擊的方法內部,您可以確定點擊發生的位置,因此在用點擊的位置檢查子視圖的邊界之后,您可以驗證點擊是否發生在子視圖的邊界內。
似乎您只是希望這兩個手勢識別器同時工作。 只需為您的parentView
實現UIGestureRecognizerDelegate
,並使其成為tapGestureRecognizer
和gestureRecognizerA
的委托即可。 然后在那里實現一個可選方法:
// MARK: - UIGestureRecognizerDelegate
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) {
return true
}
即使在subView
進行圓周運動時,也可能能夠檢測到subView
中的parentView
。
更新:使用手勢識別器時,“轉發觸摸”將是簡單地調用另一個識別器的方法。 只需將正在執行轉發的識別器作為其參數即可。
例如,當檢測到輕拍時, tapGestureRecognizer
會觸發viewWasTapped(_ sender: UITapGestureRecognizer)
。 現在,當您的gestureRecognizerA
想要將其事件轉發到tapGestureRecognizer
,只需調用以下命令即可:
subView.viewWasTapped(self.gestureRecognizerA)
對方法本身進行了明顯的更改:
func viewWasTapped(_ sender: UIGestureRecognizer) {
// ...
}
這適用於UITapGestureRecognizer
。 發件人可以是任何其他UIGestureRecognizer
,您仍然可以獲得在其中解決輕擊手勢的幾乎所有信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.