इशारा पहचानने वालों
आमतौर पर उपयोग की जाने वाली स्पर्श घटनाओं (या इशारों) की एक संख्या होती है जिसे आपके द्वारा अपने दृष्टिकोण में एक इशारा पहचानने वाले को जोड़ने पर आपको सूचित किया जा सकता है । वे इशारे के बाद डिफ़ॉल्ट रूप से समर्थित हैं:
UITapGestureRecognizer
टैप (स्क्रीन को एक या अधिक बार छूना)
UILongPressGestureRecognizer
लंबा स्पर्श (लंबे समय तक स्क्रीन को छूना)
UIPanGestureRecognizer
पैन (स्क्रीन पर अपनी उंगली घुमाना)
UISwipeGestureRecognizer
स्वाइप (उंगली को जल्दी से हिलाना)
UIPinchGestureRecognizer
चुटकी (दो उंगलियों को एक साथ या अलग-अलग ले जाना - आमतौर पर ज़ूम करने के लिए)
UIRotationGestureRecognizer
घुमाएँ (एक गोलाकार दिशा में दो उंगलियाँ घुमाते हुए)
इनके अतिरिक्त, आप अपने स्वयं के कस्टम जेस्चर पहचानकर्ता भी बना सकते हैं।
इंटरफ़ेस बिल्डर में एक इशारा जोड़ना
अपने दृष्टिकोण पर ऑब्जेक्ट लाइब्रेरी से एक जेस्चर पहचानकर्ता खींचें।
एक आउटलेट और एक एक्शन करने के लिए अपने आउट कंट्रोलर कोड में डॉक्यूमेंट की रूपरेखा में इशारे से ड्रैग ड्रैग करें।
यह डिफ़ॉल्ट रूप से सेट किया जाना चाहिए, लेकिन यह भी सुनिश्चित करें कि उपयोगकर्ता कार्रवाई सक्षम आपके दृश्य के लिए सही पर सेट है।
व्यावहारिक रूप से एक इशारे को जोड़ना
एक इशारे को प्रोग्रामेटिक रूप से जोड़ने के लिए, आप (1) एक जेस्चर पहचानकर्ता बनाते हैं, (2) इसे एक दृश्य में जोड़ते हैं, और (3) एक विधि बनाते हैं जिसे इशारे से पहचाने जाने पर कहा जाता है।
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// 1. create a gesture recognizer (tap gesture)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
// 2. add the gesture recognizer to a view
myView.addGestureRecognizer(tapGesture)
}
// 3. this method is called when a tap is recognized
@objc func handleTap(sender: UITapGestureRecognizer) {
print("tap")
}
}
टिप्पणियाँ
-
sender
पैरामीटर वैकल्पिक है। यदि आपको इशारे के संदर्भ की आवश्यकता नहीं है तो आप इसे छोड़ सकते हैं। यदि आप ऐसा करते हैं, हालांकि, (sender:)
एक्शन विधि नाम के बाद हटा दें ।
handleTap
विधि का नामकरण मनमाना था। जो भी आप उपयोग करना चाहते हैं उसका नाम दें ।action: #selector(someMethodName(sender:))
और ज्यादा उदाहरण
आप हावभाव पहचानकर्ताओं का अध्ययन कर सकते हैं कि मैंने इन विचारों को जोड़ा कि वे कैसे काम करते हैं।
यहाँ उस परियोजना के लिए कोड है:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tapView: UIView!
@IBOutlet weak var doubleTapView: UIView!
@IBOutlet weak var longPressView: UIView!
@IBOutlet weak var panView: UIView!
@IBOutlet weak var swipeView: UIView!
@IBOutlet weak var pinchView: UIView!
@IBOutlet weak var rotateView: UIView!
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Tap
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap))
tapView.addGestureRecognizer(tapGesture)
// Double Tap
let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTap))
doubleTapGesture.numberOfTapsRequired = 2
doubleTapView.addGestureRecognizer(doubleTapGesture)
// Long Press
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(gesture:)))
longPressView.addGestureRecognizer(longPressGesture)
// Pan
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan(gesture:)))
panView.addGestureRecognizer(panGesture)
// Swipe (right and left)
let swipeRightGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(gesture:)))
let swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(gesture:)))
swipeRightGesture.direction = UISwipeGestureRecognizerDirection.right
swipeLeftGesture.direction = UISwipeGestureRecognizerDirection.left
swipeView.addGestureRecognizer(swipeRightGesture)
swipeView.addGestureRecognizer(swipeLeftGesture)
// Pinch
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(gesture:)))
pinchView.addGestureRecognizer(pinchGesture)
// Rotate
let rotateGesture = UIRotationGestureRecognizer(target: self, action: #selector(handleRotate(gesture:)))
rotateView.addGestureRecognizer(rotateGesture)
}
// Tap action
@objc func handleTap() {
label.text = "Tap recognized"
// example task: change background color
if tapView.backgroundColor == UIColor.blue {
tapView.backgroundColor = UIColor.red
} else {
tapView.backgroundColor = UIColor.blue
}
}
// Double tap action
@objc func handleDoubleTap() {
label.text = "Double tap recognized"
// example task: change background color
if doubleTapView.backgroundColor == UIColor.yellow {
doubleTapView.backgroundColor = UIColor.green
} else {
doubleTapView.backgroundColor = UIColor.yellow
}
}
// Long press action
@objc func handleLongPress(gesture: UILongPressGestureRecognizer) {
label.text = "Long press recognized"
// example task: show an alert
if gesture.state == UIGestureRecognizerState.began {
let alert = UIAlertController(title: "Long Press", message: "Can I help you?", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
// Pan action
@objc func handlePan(gesture: UIPanGestureRecognizer) {
label.text = "Pan recognized"
// example task: drag view
let location = gesture.location(in: view) // root view
panView.center = location
}
// Swipe action
@objc func handleSwipe(gesture: UISwipeGestureRecognizer) {
label.text = "Swipe recognized"
// example task: animate view off screen
let originalLocation = swipeView.center
if gesture.direction == UISwipeGestureRecognizerDirection.right {
UIView.animate(withDuration: 0.5, animations: {
self.swipeView.center.x += self.view.bounds.width
}, completion: { (value: Bool) in
self.swipeView.center = originalLocation
})
} else if gesture.direction == UISwipeGestureRecognizerDirection.left {
UIView.animate(withDuration: 0.5, animations: {
self.swipeView.center.x -= self.view.bounds.width
}, completion: { (value: Bool) in
self.swipeView.center = originalLocation
})
}
}
// Pinch action
@objc func handlePinch(gesture: UIPinchGestureRecognizer) {
label.text = "Pinch recognized"
if gesture.state == UIGestureRecognizerState.changed {
let transform = CGAffineTransform(scaleX: gesture.scale, y: gesture.scale)
pinchView.transform = transform
}
}
// Rotate action
@objc func handleRotate(gesture: UIRotationGestureRecognizer) {
label.text = "Rotate recognized"
if gesture.state == UIGestureRecognizerState.changed {
let transform = CGAffineTransform(rotationAngle: gesture.rotation)
rotateView.transform = transform
}
}
}
टिप्पणियाँ
- आप एक ही दृश्य में कई जेस्चर पहचानकर्ता जोड़ सकते हैं। सादगी के लिए, हालांकि, मैंने ऐसा नहीं किया (केवल स्वाइप जेस्चर को छोड़कर)। यदि आपको अपनी परियोजना की आवश्यकता है, तो आपको जेस्चर पहचानकर्ता दस्तावेज को पढ़ना चाहिए । यह काफी समझ और मददगार है।
- ऊपर दिए गए मेरे उदाहरणों के साथ ज्ञात मुद्दे: (1) पैन व्यू अगले जेस्चर इवेंट पर अपने फ्रेम को रीसेट करता है। (२) स्वाइप दृश्य पहले स्वाइप पर गलत दिशा से आता है। (मेरे उदाहरणों में ये बग आपकी समझ को प्रभावित नहीं करने चाहिए कि जेस्चर रिकॉगनाइजर्स कैसे काम करते हैं।)