UIView में टच ईवेंट कैसे जोड़ें?


280

मैं एक UIVIV में एक टच इवेंट कैसे जोड़ूं?
मैं कोशिश करूँगा:

UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, nextY)] autorelease];
[headerView addTarget:self action:@selector(myEvent:) forControlEvents:UIControlEventTouchDown];
// ERROR MESSAGE: UIView may not respond to '-addTarget:action:forControlEvents:'

मैं एक उपवर्ग और अधिलेखित नहीं करना चाहता

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

स्विफ्ट के लिए आप इसे यहां से प्राप्त कर सकते हैं: stackoverflow.com/questions/28675209/…
Mr.Javed Multani

जवाबों:


578

IOS 3.2 और उच्चतर में, आप जेस्चर पहचानकर्ताओं का उपयोग कर सकते हैं। उदाहरण के लिए, यह है कि आप एक नल घटना को कैसे संभालेंगे:

//The setup code (in viewDidLoad in your view controller)
UITapGestureRecognizer *singleFingerTap = 
  [[UITapGestureRecognizer alloc] initWithTarget:self 
                                          action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:singleFingerTap];

//The event handling method
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer
{
  CGPoint location = [recognizer locationInView:[recognizer.view superview]];

  //Do stuff here...
}

साथ ही इशारों में निर्मित झुंड हैं। IOS इवेंट हैंडलिंग के लिए डॉक्स देखें और UIGestureRecognizer। मैं भी github कि मदद कर सकता है पर नमूना कोड का एक गुच्छा है ।


लेकिन यह ओवरराइटिंग टच व्यू की कार्रवाई है। ¿क्या दृश्य की डिफ़ॉल्ट स्पर्श क्रिया को कॉल करना संभव है? [सुपर
टचबेजन

2
CGPoint लाइन क्या करती है?
जकात

2
@yourfriendzak CGPointटेप दृश्य के पर्यवेक्षण में नल के स्थान का प्रतिनिधित्व करता है। आप इस बिंदु का उपयोग टैप किए गए स्थान पर टैप किए गए दृश्य (या सहोदर दृश्य) को स्थानांतरित करने के लिए कर सकते हैं। UIPanGestureRecognizerस्क्रीन के चारों ओर के दृश्य को खींचने के लिए हैंडलर में यह अधिक उपयोगी है ।
नाथन एरोर

5
महान संक्षिप्त जवाब, धन्यवाद। लेकिन शीश, यह अच्छा नहीं होता अगर यह एक आसान सा होता ?! :)
नटब्र

यह बहुत बुरा नहीं है, लेकिन मेरी इच्छा है कि github.com/neror/ftutils/blob/master/Headers/FTUtils/… जैसे ब्लॉक आधारित एपीआई थे । Xcode 4 में इंटरफ़ेस बिल्डर में जेस्चर पहचानकर्ताओं को जोड़ने / कॉन्फ़िगर करने के लिए भी समर्थन है।
नाथन एरोर

126

इशारा पहचानने वालों

आमतौर पर उपयोग की जाने वाली स्पर्श घटनाओं (या इशारों) की एक संख्या होती है जिसे आपके द्वारा अपने दृष्टिकोण में एक इशारा पहचानने वाले को जोड़ने पर आपको सूचित किया जा सकता है । वे इशारे के बाद डिफ़ॉल्ट रूप से समर्थित हैं:

  • 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) पैन व्यू अगले जेस्चर इवेंट पर अपने फ्रेम को रीसेट करता है। (२) स्वाइप दृश्य पहले स्वाइप पर गलत दिशा से आता है। (मेरे उदाहरणों में ये बग आपकी समझ को प्रभावित नहीं करने चाहिए कि जेस्चर रिकॉगनाइजर्स कैसे काम करते हैं।)

2
विस्तृत विवरण के साथ आपका उत्तर वास्तव में अच्छा और उपयोगी है। और यही कारण है कि मेरे पास वोट है तुम भी जवाब दो। लेकिन आपने सिर्फ एक निर्देश को याद किया है जो मुझे लगता है कि आपको अपने उत्तर में शामिल करना चाहिए क्योंकि आपने इसे पूर्ण विवरण में समझाया है। यह निर्देश "<yourView> .EnableUserInteraction = TRUE" सेट करने के बारे में है। मुझे आशा है कि आप मुझसे सहमत होंगे।
एर। विहार

3
इस काम को UIViewकरने के लिए आपको जोड़ने की भी जरूरत है:self.isUserInteractionEnabled = true;
नीकर

52

मुझे लगता है कि आप बस उपयोग कर सकते हैं

UIControl *headerView = ...
[headerView addTarget:self action:@selector(myEvent:) forControlEvents:UIControlEventTouchDown];

मेरा मतलब है कि headerView UIControl से निकलता है।


7
यह बेहतर उत्तर है। UITapGestureRecognizerके स्थान पर नहीं है UIControlEventTouchDown। एक Tapआम तौर पर की तैयार करता UIControlEventTouchDownऔर UIControlEventTouchUpInside
ओहो

62
A UIViewएक नहीं है UIControlऔर इस तरह उसकी पहुंच नहीं है addTarget:action:forControlEvents:
राबर्टजॉसेफ

9
यह भी ध्यान दें कि एक UIControl UIView से विरासत में मिला है। अपने उद्देश्यों के लिए मुझे केवल इतना करना था कि उपवर्ग प्रकार का एक सरल स्विच था।
प्रेट्ज़ेल्स 1337

1
आप इसकी कक्षा को UIControl @RobertJoseph पर सेट कर सकते हैं .. xib फ़ाइल पर जाएँ और देखें कस्टम वर्ग को UIControl पर सेट करें। अब आप इसमें घटना को संभाल सकते हैं ..
ज़ार ई अहमर

2
तो क्यों यह एक बेहतर समाधान फिर से मैं विरासत को बदल रहा हूँ बस नल को संभालने के लिए?
एंथोनी ग्लाइदेंको

21

स्विफ्ट 3 और स्विफ्ट 4

import UIKit

extension UIView {
  func addTapGesture(tapNumber: Int, target: Any, action: Selector) {
    let tap = UITapGestureRecognizer(target: target, action: action)
    tap.numberOfTapsRequired = tapNumber
    addGestureRecognizer(tap)
    isUserInteractionEnabled = true
  }
}

उपयोग

yourView.addTapGesture(tapNumber: 1, target: self, action: #selector(yourMethod))

धन्यवाद। बहुत अच्छा काम करता है!
मिक्रसा

1
इसे प्रेम करें! परियोजनाओं में सभी को जोड़ना;)
दोस्तो

17

स्वीकृत उत्तर के आधार पर आप एक मैक्रो को परिभाषित कर सकते हैं:

#define handle_tap(view, delegate, selector) do {\
    view.userInteractionEnabled = YES;\
    [view addGestureRecognizer: [[UITapGestureRecognizer alloc] initWithTarget:delegate action:selector]];\
} while(0)

यह मैक्रो ARC का उपयोग करता है, इसलिए कोई releaseकॉल नहीं है ।

मैक्रो उपयोग उदाहरण:

handle_tap(userpic, self, @selector(onTapUserpic:));

4
यदि आप स्टोरीबोर्ड में दृश्य बनाते हैं, तो "उपयोगकर्ता इंटरैक्शन सक्षम" विकल्प को सक्षम करने के लिए मत भूलना।
डेविड

जहां हमें .h या .m में मैक्रोज़ को परिभाषित करना चाहिए और मापदंडों का नाम क्या होना चाहिए। मेरा मतलब है #define handle_tap (UIView व्यू, डेलीगेट डेलीगेट, एसईएल सेलेक्टर) करते हैं ..
Zar E Ahmer

8

आप अपने कोड में Gesture Recogniser को जोड़कर इसे हासिल कर सकते हैं।

चरण 1: ViewController.m:

// Declare the Gesture.
UITapGestureRecognizer *gesRecognizer = [[UITapGestureRecognizer alloc] 
                                          initWithTarget:self 
                                          action:@selector(handleTap:)];
gesRecognizer.delegate = self;

// Add Gesture to your view.
[yourView addGestureRecognizer:gesRecognizer]; 

चरण 2: ViewController.m:

// Declare the Gesture Recogniser handler method.
- (void)handleTap:(UITapGestureRecognizer *)gestureRecognizer{
   NSLog(@"Tapped");
}

ध्यान दें: यहाँ आपका दृश्य मेरे मामले में था @property (strong, nonatomic) IBOutlet UIView *localView;

संपादित करें: * localView नीचे से Main.storyboard में सफेद बॉक्स है

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें


मैं कई बार देख रहा हूँ तो क्या मैं प्रेषक आईडी कर सकता हूँ ??
मोइन शिराज़ी

आपको आंतरिक सबव्यू पर जाना है, फिर आप प्रेषक को भेज सकते हैं ।--------- (UIView * view in self.topicScrollView.subviews) {// पर्यवेक्षक के अंदर जाएं यदि ([देखें isKindOfClass: [UIButton वर्ग]]) {// उस विशेष दृश्य पर जाएं // यहां आप उस बिंदु तक पहुंच गए हैं। }}
अन्नू

8

में स्विफ्ट 4.2 और Xcode 10

स्पर्श ईवेंट जोड़ने के लिए UITapGestureRecognizer का उपयोग करें

//Add tap gesture to your view
let tap = UITapGestureRecognizer(target: self, action: #selector(handleGesture))
yourView.addGestureRecognizer(tap)

// GestureRecognizer
@objc func handleGesture(gesture: UITapGestureRecognizer) -> Void {
//Write your code here
}

यदि आप SharedClass का उपयोग करना चाहते हैं

//This is my shared class
import UIKit

class SharedClass: NSObject {

    static let sharedInstance = SharedClass()

    //Tap gesture function
    func addTapGesture(view: UIView, target: Any, action: Selector) {
        let tap = UITapGestureRecognizer(target: target, action: action)
        view.addGestureRecognizer(tap)
    }
} 

मेरे ViewController में 3 दृश्य हैं जिन्हें view1, view2 और view3 कहा जाता है।

override func viewDidLoad() {
    super.viewDidLoad()
    //Add gestures to your views
    SharedClass.sharedInstance.addTapGesture(view: view1, target: self, action: #selector(handleGesture))
    SharedClass.sharedInstance.addTapGesture(view: view2, target: self, action: #selector(handleGesture))
    SharedClass.sharedInstance.addTapGesture(view: view3, target: self, action: #selector(handleGesture2))

}

// GestureRecognizer
@objc func handleGesture(gesture: UITapGestureRecognizer) -> Void {
    print("printed 1&2...")
}
// GestureRecognizer
@objc func handleGesture2(gesture: UITapGestureRecognizer) -> Void {
    print("printed3...")
}

6

Heres a Swift संस्करण:

// MARK: Gesture Extensions
extension UIView {

    func addTapGesture(#tapNumber: Int, target: AnyObject, action: Selector) {
        let tap = UITapGestureRecognizer (target: target, action: action)
        tap.numberOfTapsRequired = tapNumber
        addGestureRecognizer(tap)
        userInteractionEnabled = true
    }

    func addTapGesture(#tapNumber: Int, action: ((UITapGestureRecognizer)->())?) {
        let tap = BlockTap (tapCount: tapNumber, fingerCount: 1, action: action)
        addGestureRecognizer(tap)
        userInteractionEnabled = true
    }
}

क्या है BlockTap?
वह Yifei 何 一 Y

1
अरे यार, वो हिस्सा भूल गया। इसका एक कस्टम फंक्शन है। यहाँ: github.com/goktugyil/EZSwiftExtensions/blob/master/Sources/...
Esqarrouth

5

स्विफ्ट 3:

let tapGestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTapGestureRecognizer(_:)))
view.addGestureRecognizer(tapGestureRecognizer)

func handleTapGestureRecognizer(_ gestureRecognizer: UITapGestureRecognizer) {

}

1

इन दिनों काफी सरल लगता है। यह स्विफ्ट संस्करण है।

let tap = UITapGestureRecognizer(target: self, action: #selector(viewTapped))
    view.addGestureRecognizer(tap)

@objc func viewTapped(recognizer: UIGestureRecognizer)
{
    //Do what you need to do!
}

0

यहाँ ios tapesture है; सबसे पहले आपको नीचे दिखाए गए क्रिया के तहत नीचे कोड लिखने के बाद GestureRecognizer के लिए कार्रवाई बनाने की आवश्यकता है

- (IBAction)tapgesture:(id)sender

{


[_password resignFirstResponder];


[_username resignFirstResponder];

NSLog(@" TapGestureRecognizer  tapped");

}

0

एक अन्य तरीका दृश्य में एक पारदर्शी बटन जोड़ रहा है

UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
b.frame = CGRectMake(0, 0, headerView.width, headerView.height);
[headerView addSubview:b];
[b addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchDown];

और फिर, हैंडल क्लिक करें:

- (void)buttonClicked:(id)sender
{}

0

एक जेस्चर पहचानकर्ता (उपवर्ग) बनाएं, जो स्पर्श घटनाओं को लागू करेगा, जैसे touchesBegan । आप इसे उसके बाद के दृश्य में जोड़ सकते हैं।

इस तरह आप उप-वर्ग (जो अनुरोध था) के बजाय रचना का उपयोग करेंगे।


0

आप लोग SSEventListener की कोशिश क्यों नहीं करते ?

आपको किसी भी हावभाव पहचानकर्ता को बनाने और अपने तर्क को किसी अन्य विधि से अलग करने की आवश्यकता नहीं है। SSEventListenerसिंगल टैप जेस्चर, डबल टैप जेस्चर और एन-टैप जेस्चर यदि आपको पसंद है, और लॉन्ग प्रेस जेस्चर के लिए सुनने के लिए श्रोता ब्लॉक सेट करने का समर्थन करता है। एकल नल जेस्चर श्रोता को इस तरह सेट करना:

[view ss_addTapViewEventListener:^(UITapGestureRecognizer *recognizer) { ... } numberOfTapsRequired:1];


0

उद्देश्य सी:

UIControl *headerView = [[UIControl alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, nextY)];
[headerView addTarget:self action:@selector(myEvent:) forControlEvents:UIControlEventTouchDown];

स्विफ्ट:

let headerView = UIControl(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: nextY))
headerView.addTarget(self, action: #selector(myEvent(_:)), for: .touchDown)

सवाल पूछता है:

मैं एक UIView में एक टच इवेंट कैसे जोड़ूं ?

यह एक नल घटना के लिए नहीं पूछ रहा है ।

विशेष रूप से ओपी को लागू करना चाहता है UIControlEventTouchDown

स्विचिंग UIViewके लिए UIControlक्योंकि यहाँ है सही जवाब Gesture Recognisersके बारे में कुछ नहीं पता .touchDown, .touchUpInside,.touchUpOutside आदि

इसके अतिरिक्त, UIControl को UIView से विरासत में मिला है इसलिए आप कोई कार्यक्षमता नहीं खो रहे हैं।

यदि आप चाहते हैं कि सब कुछ एक नल है, तो आप जेस्चर रिकॉग्निज़र का उपयोग कर सकते हैं। लेकिन अगर आप महीन नियंत्रण चाहते हैं, जैसे यह प्रश्न पूछता है, तो आपको UIControl की आवश्यकता होगी।

https://developer.apple.com/documentation/uikit/uicontrol?language=objc https://developer.apple.com/documentation/uikit/uigesturerecognizer?language/objc

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.