34

我对编程和Objective C非常陌生。我想知道如何制作一个应用程序,其中有一个空白屏幕和一分钟的计时器。你的目的是尽可能快地挖掘,只要你可以。我想知道如何在我的代码中实现UITapGestureRecognizer如何将UITapGestureRecognizer实现到我的应用程序中

+0

帮助自己:https://github.com/nhahtdh/PS3/blob/master/Game/GameBlock.m – nhahtdh 2012-07-06 04:10:18

回答

86

这是如何实现你的类手势识别一步一步的指导:

  1. 顺应你的类UIGestureRecognizerDelegate协议。

  2. 实例化手势识别器。例如,实例化一个UITapGestureRecognizer,我们会做:

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

    这里,动作是将处理手势选择。在这里,我们的选择器handleTapFrom将如下所示:

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

    选择器的参数是手势识别器。我们可以使用这个手势识别器来访问它的属性,例如,我们可以发现手势识别的状态一样,UIGestureRecognizerStateBeganUIGestureRecognizerStateEnded

  3. 坐落在实例化的手势识别所需的性能。例如,对于UITapGestureRecognizer,我们可以设置属性numberOfTapsRequirednumberOfTouchesRequired

  4. 将手势识别器添加到要检测手势的视图。在我们的示例代码(我将分享给大家参考的代码),我们将手势识别器添加到的ImageView与下面的代码行:

    [self.imageView addGestureRecognizer:tapGestureRecognizer]; 
    
  5. 增加手势识别到视图后,设置代表手势识别器,即将处理所有手势识别器的类。在我们的示例代码,它会像:

    tapGestureRecognizer.delegate = self; 
    

    注:增加手势识别到视图后指定的代表。否则,该操作方法将不会被调用。

+0

对不起,不恰当的格式! – 2012-07-06 04:17:31

+0

非常感谢您的帮助! – 2012-07-06 04:18:07

+2

没什么好担心的。标记下来的格式有一个学习曲线。 – nhahtdh 2012-07-06 04:18:39

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是必不可少的。谢谢! – 2015-04-02 11:55:24

+0

我不明白为什么需要检查“recognizer.state == UIGestureRecognizerState.Ended”。我测试了这一点,它没有它也能正常工作。我的假设是,你需要它多点击手势识别器,但只需一次敲击,我们是否仍然需要它? – plam4u 2016-07-05 10:16:33

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") 
    } 
} 
相关问题