如何在我的应用程序中实现UITapGestureRecognizer

obj*_*pro 42 user-interface objective-c uigesturerecognizer ios uitapgesturerecognizer

我对编程和目标C都很陌生.我想知道如何制作一个有空白屏幕和计时器一分钟的应用程序.你的意思是尽可能快地点击,只要你可以.我想知道如何实现UITapGestureRecognizer我的代码.

小智 94

这是关于如何在班级中实现手势识别器的分步指南:

  1. 使您的班级符合UIGestureRecognizerDelegate协议.

  2. 实例化手势识别器.例如,要实例化a UITapGestureRecognizer,我们将:

    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

  3. 在实例化的手势识别器上设置所需的属性.例如,对于a UITapGestureRecognizer,我们可以设置属性numberOfTapsRequired,和numberOfTouchesRequired.

  4. 将手势识别器添加到要检测手势的视图中.在我们的示例代码中(我将分享该代码供您参考),我们将使用以下代码行向imageView添加手势识别器:

    [self.imageView addGestureRecognizer:tapGestureRecognizer];
    
    Run Code Online (Sandbox Code Playgroud)
  5. 将手势识别器添加到视图后,设置手势识别器的委托,即将处理所有手势识别器内容的类.在我们的示例代码中,它将是:

    tapGestureRecognizer.delegate = self;
    
    Run Code Online (Sandbox Code Playgroud)

    注意:将手势识别器添加到视图后分配代理.否则,将不会调用action方法.

  • 由于您使用(target:self)分配手势并未将其委托设置为self并且使UIGestureRecognizerDelegate协议符合冗余?我从来没有设置委托也没有实现协议,我只是使用@ selector的签名实现方法,一切都对我来说很好. (6认同)
  • 不需要步骤1.`UIGestureRecognizerDelegate`用于实现手势识别器的类,而不是用于使用一个的类. (6认同)
  • 没什么好抱歉的.在标记格式化方面存在学习曲线. (2认同)

小智 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
Run Code Online (Sandbox Code Playgroud)


Kin*_*ard 14

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.")
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 没错,userInteractionEnabled是必不可少的.谢谢! (2认同)