一、概述

iPhone中处理触摸屏的操作,在3.2之前是主要使用的如下4种方式:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

但是这种方式比较麻烦,目前有了比较简便的方式,就是使用UIGestureRecognizer。

二、UIGestureRecognizer

UIGestureRecognizer是一个抽象类,我们主要是使用它的子类:

  • UITapGestureRecognizer

  • UIPinchGestureRecognizer

  • UIRotationGestureRecognizer

  • UISwipeGestureRecognizer

  • UIPanGestureRecognizer

  • UILongPressGestureRecognizer

从名字上我们就能知道, Tap(点一下)、Pinch(二指往內或往外拨动)、Rotation(旋转)、Swipe(滑动,快速移动)、Pan (拖移,慢速移动)以及 LongPress(长按)。举个例子,可以在viewDidLoad函数里面添加:

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
[self.view addGestureRecognizer:panRecognizer];
panRecognizer.maximumNumberOfTouches = 1;
panRecognizer.delegate = self;
[panRecognizer release];

其它手势方法类似。主要就是设置delegate和在需要的view上使用addGestureRecognizer。当然在要记得在作为delegate的view的头文件加上<UIGestureRecognizerDelegate>。

不过有些手势是关联的,怎么办呢?例如 Tap 与 LongPress、Swipe与 Pan,或是 Tap 一次与Tap 兩次。比如单击和双击,如果它识别出一种手势,其后的手势将不被识别,也就是说单击和双击并存时,它只能发送出单击的消息,这个时候就需要先判断是否时双击,在双击失效的情况下作为单击。

requireGestureRecognizerToFail,他可以指定某一个 recognizer,即便自己已经滿足條件了,也不會立刻触发,会等到该指定的 recognizer 确定失败之后才触发。

- (void)viewDidLoad {
// 单击的 Recognizer
UITapGestureRecognizer* singleRecognizer;
singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleSingleTapFrom)];
singleTapRecognizer.numberOfTapsRequired = 1; // 单击
[self.view addGestureRecognizer:singleRecognizer];
// 双击的 Recognizer
UITapGestureRecognizer* double;
doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleDoubleTapFrom)];
doubleTapRecognizer.numberOfTapsRequired = 2; // 双击
[self.view addGestureRecognizer:doubleRecognizer];
// 关键在这一行,如果双击确定偵測失败才會触发单击
[singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];
[singleRecognizer release];
[doubleRecognizer release];
}

参考资料:
http://www.cocoachina.com/iphonedev/sdk/2010/1214/2471.html

http://blog.csdn.net/pjk1129/article/details/6824810

iPhone手势处理--UIGestureRecognizer相关推荐

  1. iOS手势学习UIGestureRecognizer cocos2d 手势推荐

    iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer  // 长按 UIPanGestu ...

  2. 使用iOS手势UIGestureRecognizer

    UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势.UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势 ...

  3. 手势UIGestureRecognizer

    UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势.UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势 ...

  4. iOS手势-UIGestureRecognizer

    原文链接 1. UIGestureRecognizer 父类是NSObject 利用手势识别器---UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势 UIGes ...

  5. UIGestureRecognizer手势

    UIGestureRecognizer手势 目录 1.什么是手势以及手势的种类 2.手势的添加及常用属性 3.多种手势并用 1.什么是手势以及手势的种类 UIKit中包含了UIGestureRecog ...

  6. 手势控制:点击、滑动、平移、捏合、旋转、长按、轻扫

    手势识别器(Gesture Recognizer)用于识别触摸序列并触发响应事件.当手势识别器识别到一个手势或手势发生变化时,会触发响应事件.UIGestureRecognizer类作为抽象类,不能直 ...

  7. iOS 关闭页面侧滑手势

    -(void)popGestureChange:(UIViewController *)vc enable:(BOOL)enable{if ([vc.navigationController resp ...

  8. IOS开发之UI手势

    2019独角兽企业重金招聘Python工程师标准>>> 点击手势和双击手势 #import "TapViewController.h" @interface Ta ...

  9. iOS手势操作简介(三)

    监听触摸事件的做法 如果想监听一个view上面的触摸事件,之前的做法是 自定义一个view 实现view的touches方法,在方法内部实现具体处理代码 通过touches方法监听view触摸事件,有 ...

  10. iOS 手势操作:拖动、捏合、旋转、点按、长按、轻扫、自定义

    http://www.cnblogs.com/huangjianwu/p/4675648.html 1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动 ...

最新文章

  1. Android开发--FileInputStream/OutStream/Sdcard写入
  2. 自定义spring配置文件位置
  3. numpy 数据类型与 Python 原生数据类型
  4. sql server实用工具sql prompt的安装与注册
  5. 研发管理(2)---技术总监的三板斧
  6. 编程语言那么多,学哪个能拿高薪?
  7. full join 和full outer join_带你了解数据库中JOIN的用法
  8. 在js的函数中用jquery的trim()方法去掉search前后的空格
  9. 当代移动通信发展四个阶段
  10. 20190628 《此生,未完成》-- 于娟
  11. 驯服烂代码_驯服业力,SauceLabs和Internet Explorer:揭秘之旅
  12. 比伯女友首谈私生子事件 挺男友:事实胜于诡辩
  13. 剪切文件丢失如何恢复
  14. 华为H3C 交换机路由器常用命令
  15. OpenCV 各版本百度云下载
  16. C语言讲义——链表的实现
  17. 浏览器全屏和pc显示器全屏
  18. 编码器相关知识及ESP32-Arduino程序
  19. MySQL在我的服务列表里凭空消失~
  20. 用友grp_U8.B版政务财政管理软件往来明细表浮动表数据库源。村集体经济组织会计制度

热门文章

  1. VBA教程初级(五):复杂数组
  2. Windows 7 修改系统临时文件夹
  3. 2022年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】
  4. python中encode函数_python中文处理之encode/decode函数
  5. encode decode 使用指南
  6. 工作展望简短_简短的工作计划
  7. 通过 http-proxy-middleware 跨域代理与添加自定义cookie
  8. 计算机主板维修,计算机主板维修从业技能全程通(70M)*
  9. Allure测试报告定制化
  10. MySQL 管理之道读书总结