34

में UITapGestureRecognizer को कैसे कार्यान्वित कर सकता हूं मैं प्रोग्रामिंग और उद्देश्य सी के लिए काफी नया हूं। मैं सोच रहा था कि एक ऐप कैसे बनाना है जिसमें एक खाली स्क्रीन और एक टाइमर है जो एक मिनट के लिए जाता है। आप जितनी जल्दी हो सके उतनी तेज़ी से टैप करने के लिए हैं और जब तक आप कर सकते हैं। मैं सोच रहा था कि UITapGestureRecognizer को मेरे कोड में कैसे कार्यान्वित किया जाए।मैं अपने आवेदन

+0

मदद अपने आप को: https://github.com/nhahtdh/PS3/blob/master/Game/GameBlock.m – nhahtdh

उत्तर

86

यह कैसे अपनी कक्षा में इशारा recognizers को लागू करने पर कदम गाइड द्वारा एक कदम है:

  1. UIGestureRecognizerDelegate प्रोटोकॉल के लिए अपने वर्ग अनुरूप होने चाहिए।

  2. इशारा पहचानकर्ता को तत्काल करें। उदाहरण के लिए, एक UITapGestureRecognizer का दृष्टांत के लिए, हम क्या करेंगे:

    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)]; 
    

    यहाँ, कार्रवाई चयनकर्ता जो इशारा संभाल लेंगे है। इधर, हमारे चयनकर्ता handleTapFrom कुछ ऐसी दिखाई देगी तरह:

    - (void) handleTapFrom: (UITapGestureRecognizer *)recognizer 
    { 
        //Code to handle the gesture 
    } 
    

    चयनकर्ता के तर्क इशारा पहचानकर्ता है। हम, जैसे, UIGestureRecognizerStateBegan, UIGestureRecognizerStateEnded उसके गुण का उपयोग करने की, उदाहरण के लिए, हम इशारा पहचानकर्ता के राज्य पा सकते हैं, आदि इस कदम पहचानकर्ता का उपयोग कर सकते

  3. instantiated इशारा पहचानकर्ता पर वांछित गुण सेट करें। उदाहरण के लिए, UITapGestureRecognizer के लिए, हम गुण numberOfTapsRequired, और numberOfTouchesRequired सेट कर सकते हैं।

  4. जेस्चर पहचानकर्ता को उस दृश्य में जोड़ें जिसे आप जेस्चर का पता लगाना चाहते हैं।

    [self.imageView addGestureRecognizer:tapGestureRecognizer]; 
    
  5. देखने के लिए इशारा पहचानकर्ता जोड़ने के बाद, सेट करें: हमारा नमूना कोड में (मैं आपके संदर्भ के लिए है कि कोड को साझा करेंगे), हम निम्न कोड पंक्ति के साथ एक imageView करने के लिए इशारा recognizers जोड़ देगा इशारा पहचानकर्ता के लिए प्रतिनिधि, यानी कक्षा जो सभी इशारा पहचानकर्ता सामानों को संभालेगी। हमारा नमूना कोड में, यह हो सकता है की तरह:

    tapGestureRecognizer.delegate = self; 
    

    नोट: देखने के लिए इशारा पहचानकर्ता जोड़ने के बाद प्रतिनिधि असाइन करें। अन्यथा, कार्रवाई विधि नहीं कहा जाएगा।

+0

अनुचित प्रारूप के लिए खेद है !!! –

+0

आपकी मदद दोस्तों के लिए बहुत बहुत धन्यवाद! –

+2

के बारे में कुछ भी क्षमा करने के लिए नहीं। जब मार्क-डाउन स्वरूपण की बात आती है तो एक सीखने की वक्र होती है। – nhahtdh

11
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; 
[self.tableView addGestureRecognizer:gestureRecognizer]; 
self.tableView.userInteractionEnabled = YES; 
gestureRecognizer.cancelsTouchesInView = NO; // this prevents the gesture recognizers to 'block' touches 
9

स्विफ्ट में उदाहरण:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var myUIImageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let singleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "myUIImageViewTapped:") 
     singleTap.numberOfTapsRequired = 1 
     singleTap.numberOfTouchesRequired = 1 
     self.myUIImageView.addGestureRecognizer(singleTap) 
     self.myUIImageView.userInteractionEnabled = true 
    } 

    func myUIImageViewTapped(recognizer: UITapGestureRecognizer) { 
     if(recognizer.state == UIGestureRecognizerState.Ended){ 
      println("myUIImageView has been tapped by the user.") 
     } 
    } 

} 
+2

यह सही है, userInteractionEnabled आवश्यक है। धन्यवाद! –

+0

मुझे समझ में नहीं आता है कि "पहचानकर्ता.स्टेट == UIGestureRecognizerState.Ended" की जांच क्यों करनी है। मैंने इसका परीक्षण किया और यह इसके बिना भी काम करता है। मेरी धारणा यह है कि आपको बहु-टैप इशारा पहचानकर्ता के लिए इसकी आवश्यकता है लेकिन एक टैप के लिए, क्या हमें अभी भी इसकी आवश्यकता है? – plam4u

0

आप स्विफ्ट (iOS9) और SpriteKit काम कर रहे हैं, तो निम्नलिखित का प्रयास करें।

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     let singleTap = UITapGestureRecognizer(target:self, action:#selector(self.handleSingleTap:)) 
     singleTap.numberOfTouchesRequired = 1 
     singleTap.addTarget(self, action:#selector(self.handleSingleTap)) 
     view.userInteractionEnabled = true 
     view.addGestureRecognizer(singleTap) 
    } 
    //event handler 
    func handleSingleTap(sender:UITapGestureRecognizer){ 
     print("tapped") 
    } 
} 
संबंधित मुद्दे