2017-04-19 25 views
4

現在のビューの外にタップを検出する方法はありますか?私はhitTestメソッドを使って何かを実装しようとしたが、うまくいきませんでした。現在のビューの外にあるタップを検出します

+0

あなたはtouchesBeganを試しましたか? – ankit

+0

現在のビューを含むビューにtapGestureを追加することができます。 – Larme

+0

私はこれをやっています:https://stackoverflow.com/a/48790850/7132300 – algrid

答えて

0

あなたはそれがあなたのビューの中にあった場合、タッチが背景ビューにあったが、「偽」の場合のみ「true」を返します

extension YourViewController: UIGestureRecognizerDelegate { 

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

UIGestureRecognizerDelegateプロトコルを使用することができます。

注:アイデンティティ演算子=== touch.viewとself.viewを比較します。両方の変数が同じオブジェクトを参照しているかどうかを知りたい。

viewDidLoad()では、gestureRecognizerを作成してデリゲートを設定します。 、touchesBeganであなたがタッチセットから第1のタッチオブジェクトを取得するために持っていて、ビューでそのタッチの位置を確認する必要がされて何をする必要があり

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

(あなたが望むその内側タッチを検出する)。

ビューでタッチの位置を取得した後、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") 
     } 
    } 

希望に役立つ!

関連する問題