转自:http://blog.csdn.net/longzs/article/details/7457108

在ios开发中,需用到对于手指的不同操作,以手指点击为例:分为单指单击、单指多击、多指单击、多指多击。对于这些事件进行不同的操作处理,由于使用系统自带的方法通过判断touches不太容易处理,而且会有事件之间的冲突。

接下来,通过以UITapGestureRecognizer 手势实现此功能需求 代码如下:

ViewController.m中的viewDidLoad方法:

   1:  //单指单击
   2:      UITapGestureRecognizer *singleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self 
   3:                                      action:@selector(handleSingleFingerEvent:)];
   4:      singleFingerOne.numberOfTouchesRequired = 1; //手指数
   5:      singleFingerOne.numberOfTapsRequired = 1; //tap次数
   6:      singleFingerOne.delegate = self;
   7:      
   8:      //单指双击
   9:      UITapGestureRecognizer *singleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self 
  10:                                       action:@selector(handleSingleFingerEvent:)];
  11:      singleFingerTwo.numberOfTouchesRequired = 1;
  12:      singleFingerTwo.numberOfTapsRequired = 2;
  13:      singleFingerTwo.delegate = self;
  14:      
  15:      //双指单击
  16:      UITapGestureRecognizer *doubleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self 
  17:                                       action:@selector(handleDoubleFingerEvent:)];
  18:      doubleFingerOne.numberOfTouchesRequired = 2;
  19:      doubleFingerOne.numberOfTapsRequired = 1;
  20:      doubleFingerOne.delegate = self;
  21:      
  22:      UITapGestureRecognizer *doubleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self 
  23:     action:@selector(handleDoubleFingerEvent:)];
  24:      doubleFingerTwo.numberOfTouchesRequired = 2;
  25:      doubleFingerTwo.numberOfTapsRequired = 2;
  26:      doubleFingerTwo.delegate = self;
  27:      
  28:      //如果不加下面的话,当单指双击时,会先调用单指单击中的处理,再调用单指双击中的处理
  29:      [singleFingerOne requireGestureRecognizerToFail:singleFingerTwo];
  30:      //同理双指亦是如此
  31:      [doubleFingerOne requireGestureRecognizerToFail:doubleFingerTwo];
  32:      
  33:      [self.view addGestureRecognizer:singleFingerOne];
  34:      [self.view addGestureRecognizer:singleFingerTwo];
  35:      [self.view addGestureRecognizer:doubleFingerOne];
  36:      [self.view addGestureRecognizer:doubleFingerTwo];
  37:      
  38:      [singleFingerOne release];
  39:      [singleFingerTwo release];
  40:      [doubleFingerOne release];
  41:      [doubleFingerTwo release];

处理事件的方法,代码:

   1:  //处理单指事件
   2:  - (void)handleSingleFingerEvent:(UITapGestureRecognizer *)sender
   3:  {
   4:      if (sender.numberOfTapsRequired == 1) {
   5:          //单指单击
   6:          NSLog(@"单指单击");
   7:      }else if(sender.numberOfTapsRequired == 2){
   8:          //单指双击
   9:          NSLog(@"单指双击");
  10:      }
  11:  }
  12:  //处理双指事件
  13:  - (void)handleDoubleFingerEvent:(UITapGestureRecognizer *)sender
  14:  {
  15:      if (sender.numberOfTapsRequired == 1) {
  16:          //双指单击
  17:          NSLog(@"双指单击");
  18:      }else if(sender.numberOfTapsRequired == 2){
  19:          //双指双击
  20:          NSLog(@"双指双击");
  21:      }
  22:  }

将相应代码复制到你的工程中即可使用,由于代码中已经有详细的解释说明,这里就不在重复解释了。

代码中只是列举了单指与双指对于单击或多击的处理,同理多指的操作需修改numberOfTouchesRequired属性,对点击的次数需修改numberOfTapsRequired属性。

对于其他手势例如UISwipeGestureRecognizer,UILongPressGestureRecognizer,UILongPressGestureRecognizer的操作使用类似处理。

ios UITapGestureRecognizer 单指单击、单指多击、多指单击、多指多击事件操作的更多相关文章

  1. 李洪强iOS经典面试题36-简单介绍 ARC 以及 ARC 实现的原理

    李洪强iOS经典面试题36-简单介绍 ARC 以及 ARC 实现的原理   问题 简单介绍 ARC 以及 ARC 实现的原理. 考查点 ARC 是苹果在 WWDC 2011 提出来的技术,因此很多新入 ...

  2. 李洪强iOS经典面试题32-简单介绍 ARC 以及 ARC 实现的原理

    李洪强iOS经典面试题32-简单介绍 ARC 以及 ARC 实现的原理 问题 简单介绍 ARC 以及 ARC 实现的原理. 考查点 ARC 是苹果在 WWDC 2011 提出来的技术,因此很多新入行的 ...

  3. 【iOS】ARC-MRC下的单例及其应用

    单例的应用十分普遍,单例模式使一个类仅仅有一个实例. *易于供外界訪问. *方便控制实例个数,节约系统资源. *OC中的常见单例: 如:UIApplication,  NSNotificationCe ...

  4. 走进AngularJs 表单及表单验证

    年底了越来越懒散,AngularJs的学习落了一段时间,博客最近也没更新.惭愧~前段时间有试了一下用yeoman构建Angular项目,感觉学的差不多了想做个项目练练手,谁知遇到了一系列问题.yeom ...

  5. 走进AngularJs(九)表单及表单验证

    年底了越来越懒散,AngularJs的学习落了一段时间,博客最近也没更新.惭愧~前段时间有试了一下用yeoman构建Angular项目,感觉学的差不多了想做个项目练练手,谁知遇到了一系列问题.yeom ...

  6. Bootstrap 表单和图片 (内联表单,表单合组,水平排列,复选框和单选框,下拉列表,校验状态,添加额外的图标,控制尺寸,图片)

    一.表单 基本格式 注:只有正确设置了输入框的 type 类型,才能被赋予正确的样式. 支持的输入框控件 包括:text.password.datetime.datetime-local.date.m ...

  7. JavaScript 客户端JavaScript之Document对象中的表单和表单元素

    Form对象 代表一个HTML表单(document可以有多个表单元素) 表单访问 document.form[document.forms.length-1] 访问表单元素 document.for ...

  8. bootstrap 基础表单 内联表单 横向表单

    bootstrap 基础表单 内联表单 横向表单 <!DOCTYPE html> <html> <head> <title></title> ...

  9. 统一修改表单参数(表单提交的空字符串统一转null)

    统一修改表单参数(表单提交的空字符串统一转null) 1.介绍: 我们业务中有时会遇到提交的表单中某个参数为空字符串,导致后台接受的为空字符串("")而不是我们理想中的null,会 ...

随机推荐

  1. Apache 2.4.16、PHP5.6.11安装教程

    以前我写过Apache2.4和php5.5的安装教程,但是后来我自己跟着自己写的东西做时发现有很多问题,这里把这些问题重新修正,再写一个教程,供大家参考. 注意:WinXP系统请选择旧版本Apache ...

  2. Unity发布安卓无法读取StreamingAssets文件下数据库的问题

    在移动端StreamingAssets下的文件是只读的,但大家可能跟我一样遇到了发布安卓以后放在StreamingAssets下的数据库文件一样读取不了, 但其实这个文件夹其实是可以读取到的,所以我们 ...

  3. 怎么 得到 DBGrid选中行的数据

    转自:https://zhidao.baidu.com/question/1694035814426308148.html 一般是你鼠标点到哪一行,其DataSet的指针就指到了什么位置你可以直接通过 ...

  4. php 便利数组方法

    数组在PHP中是一个非常强大的武器,用起来方便.容易,由于使用起来异常灵活,用它就可以实现数据结构中的链表.栈.队列.堆以及所谓的字典.集合等,也可以转换成XML格式. 1.使用for for语句遍历 ...

  5. 6、iOS快速枚举

    今天在写程序的时候想在当前视图跳转的时候释放掉当前视图上面add的一些子视图.因为add的子视图有些是在别的类里面add进来的,当前页面不知道自己当前有哪几个类型的子视图.这样,我就想到了用循环遍历来 ...

  6. Codeforces Round #346 (Div. 2) A Round-House

    A. Round House 题目链接http://codeforces.com/contest/659/problem/A Description Vasya lives in a round bu ...

  7. FileZilla客户端源码解析

    FileZilla客户端源码解析 FTP是TCP/IP协议组的协议,有指令通路和数据通路两条通道.一般来说,FTP标准命令TCP端口号是21,Port方式数据传输端口是20. FileZilla作为p ...

  8. 完全删除Postgresql

    First: If your install isn't already damaged, you can drop unwanted PostgreSQL servers ("cluste ...

  9. winform 制作圆形图片框

    public partial class CirclePictureBox : PictureBox { public CirclePictureBox() { Circle = true; Init ...

  10. linux下文件搜索

    常用: grep -nr "关键字" 搜索当前目录下所有匹配关键字的文件 grep -nr "关键字" *php  搜索当前目录下所有匹配关键字的php文件 f ...