You can use the UIGestureRecognizerDelegate protocol
extension YourViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldReceive touch: UITouch) -> Bool {
return (touch.view === self.view)
}
}
This only returns βtrueβ if the touch was in the background, but βfalseβ if it was inside your view.
Note. Identity operator === for comparing touch.view with self.view. You want to know if both variables refer to the same object.
viewDidLoad() gestureRecognizer .
let gestureRecognizer = UITapGestureRecognizer(target: self,action: #selector(yourActionMethod))
gestureRecognizer.cancelsTouchesInView = false
gestureRecognizer.delegate = self
view.addGestureRecognizer(gestureRecognizer)