2017-04-19 67 views
4

有沒有辦法檢測當前視圖之外的任何水龍頭?我沒有試圖用hitTest方法實現某些東西,但我不確定要理解它。檢測當前視圖外的任何水龍頭

+0

您嘗試過touchesBegan:方法 – ankit

+0

您可能想要在包含當前視圖的視圖上添加tapGesture。 – Larme

+0

我這樣做:https://stackoverflow.com/a/48790850/7132300 – algrid

回答

0

您可以使用UIGestureRecognizerDelegate協議

extension YourViewController: UIGestureRecognizerDelegate { 

     func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, 
          shouldReceive touch: UITouch) -> Bool { 
     return (touch.view === self.view) 
     } 
    } 

當觸摸是在後臺的看法,但「假」,如果它是你的視圖內這將僅返回「真」。

注意:身份運算符===將touch.view與self.view進行比較。你想知道兩個變量是否指向同一個對象。

而在viewDidLoad()中,您將創建gestureRecognizer並設置委託。

let gestureRecognizer = UITapGestureRecognizer(target: self,action: #selector(yourActionMethod)) 
gestureRecognizer.cancelsTouchesInView = false 
gestureRecognizer.delegate = self 
view.addGestureRecognizer(gestureRecognizer) 
5

,你所要做的是,在的touchesBegan你必須得到來自觸摸組第一觸摸對象,你必須檢查的視圖中觸摸的位置(內要檢測觸摸)。

當您在View中獲得觸摸的位置後,您必須檢查您的currentView(您必須檢查是否檢查水龍頭是內部還是外部)。

如果currentView的框架包含觸摸位置,那意味着觸摸發生在視圖內部,否則外部。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     let touch = touches.first 
     guard let location = touch?.location(in: self.view) else { return } 
     if !currentView.frame.contains(location) { 
      print("Tapped outside the view") 
     }else { 
      print("Tapped inside the view") 
     } 
    } 

希望它有助於!

相關問題