How do I implement the UITapGestureRecognizer into my application

前端 未结 5 1977
梦如初夏
梦如初夏 2020-11-27 06:20

I am quite new to programming and Objective C. I was wondering how to make an app which has a blank screen and a timer that goes for one minute. You are meant to tap as fast

相关标签:
5条回答
  • 2020-11-27 07:02

    If you are working Swift (iOS9) and SpriteKit, try the following.

    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")
        }
    }
    
    0 讨论(0)
  • 2020-11-27 07:04

    This is a step by step guide on how to implement gesture recognizers in your class:

    1. Conform your class to UIGestureRecognizerDelegate protocol.

    2. Instantiate the gesture recognizer. For example, to instantiate a UITapGestureRecognizer, we will do:

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

      Here, action is the selector which will handle the gesture. Here, our selector handleTapFrom will look something like:

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

      The argument to the selector is the gesture recognizer. We can use this gesture recognizer to access its properties, for example, we can find the state of the gesture recognizer, like, UIGestureRecognizerStateBegan, UIGestureRecognizerStateEnded, etc.

    3. Set the desired properties on the instantiated gesture recognizer. For example, for a UITapGestureRecognizer, we can set the properties numberOfTapsRequired, and numberOfTouchesRequired.

    4. Add the gesture recognizer to the view you want to detect gestures for. In our sample code (I will be sharing that code for your reference), we will add gesture recognizers to an imageView with the following line of code:

      [self.imageView addGestureRecognizer:tapGestureRecognizer];
      
    5. After adding the gesture recognizer to the view, set the delegate for the gesture recognizer, i.e. the class which will handle all the gesture recognizer stuff. In our sample code, it would be like:

      tapGestureRecognizer.delegate = self;
      

      Note: Assign the delegate after adding the gesture recognizer to the view. Otherwise, the action method won’t be called.

    0 讨论(0)
  • 2020-11-27 07:07

    Example in Swift:

    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.")
            }
        }
    
    }
    
    0 讨论(0)
  • 2020-11-27 07:11

    Works in Xcode 11.4, Swift 5

    class ViewController: UIViewController {
    
        @IBOutlet weak var targetView: UIView!
        override func viewDidLoad() {
            super.viewDidLoad()
            let tap = UITapGestureRecognizer(target: self, action: #selector(self.touchCallback(_:)))
            self.targetView.addGestureRecognizer(tap)
        }
    
        @objc func touchCallback(_ sender: UITapGestureRecognizer? = nil) {
            if(sender?.state == .ended) {
                print("tapped")
            }
        }
    }
    
    // If you want to touch start, available touchesBegan
    class ViewController: UIViewController {
    
        @IBOutlet weak var targetView: UIView!
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
    
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
              for touch in touches {
                  let location = touch.location(in: targetView)
                  print(location)
              }
          }
    }
    
    0 讨论(0)
  • 2020-11-27 07:14
    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
    
    0 讨论(0)
提交回复
热议问题