स्विफ्ट 5 और आईओएस 12 के साथ, UIGestureRecognizerDelegate
एक विधि कहा जाता है gestureRecognizer(_:shouldReceive:)
। gestureRecognizer(_:shouldReceive:)
निम्नलिखित घोषणा है:
प्रतिनिधि से पूछें कि क्या एक इशारा पहचानकर्ता को एक स्पर्श का प्रतिनिधित्व करने वाली वस्तु प्राप्त होनी चाहिए।
optional func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
नीचे दिए गए पूर्ण कोड के लिए एक संभावित कार्यान्वयन दिखाया गया है gestureRecognizer(_:shouldReceive:)
। इस कोड के साथ, एक ViewController
दृश्य के उप-भाग पर एक टैप (सहित imageView
) printHello(_:)
विधि को ट्रिगर नहीं करेगा ।
import UIKit
class ViewController: UIViewController, UIGestureRecognizerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(printHello))
tapGestureRecognizer.delegate = self
view.addGestureRecognizer(tapGestureRecognizer)
let imageView = UIImageView(image: UIImage(named: "icon")!)
imageView.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
view.addSubview(imageView)
// ⚠️ Enable user interaction for imageView so that it can participate to touch events.
// Otherwise, taps on imageView will be forwarded to its superview and managed by it.
imageView.isUserInteractionEnabled = true
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
// Prevent subviews of a specific view to send touch events to the view's gesture recognizers.
if let touchedView = touch.view, let gestureView = gestureRecognizer.view, touchedView.isDescendant(of: gestureView), touchedView !== gestureView {
return false
}
return true
}
@objc func printHello(_ sender: UITapGestureRecognizer) {
print("Hello")
}
}
का एक वैकल्पिक कार्यान्वयन gestureRecognizer(_:shouldReceive:)
हो सकता है:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return gestureRecognizer.view === touch.view
}
ध्यान दें कि यदि touch.view
यह सबव्यू है तो यह वैकल्पिक कोड चेक नहीं करता है gestureRecognizer.view
।