簡體   English   中英

如何在父視圖中使用手勢識別器將觸摸傳遞到子視圖

[英]how to pass touches to subview with gesture recognizer in parent view swift

我有以下情況。 parentView擁有自己的gestureRecognizerA並且具有子視圖subView ,后者具有自己的UITapGestureRecognizer 是否有任何方法告訴parentView如果這些觸摸事件在subView的范圍之內,則應將其在gestureRecognizerA識別的觸摸事件gestureRecognizerAsubView

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 ,並使其成為tapGestureRecognizergestureRecognizerA的委托即可。 然后在那里實現一個可選方法:

// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM