UIview 添加触摸.手势
IOS开发之手势——UIGestureRecognizer 共存
在 iPhone 或 iPad 的开发中,除了用 touchesBegan / touchesMoved / touchesEnded 这组方法来控制使用者的手指触控外,也可以用 UIGestureRecognizer 的衍生类別来进行判断。用 UIGestureRecognizer 的好处在于有现成的手势,开发者不用自己计算手指移动轨迹。UIGestureRecognizer的衍生类別有以下几种:
- UITapGestureRecognizer
- UIPinchGestureRecognizer
- UIRotationGestureRecognizer
- UISwipeGestureRecognizer
- UIPanGestureRecognizer
- UILongPressGestureRecognizer
从命名上不难了解這些类別所对应代表的手势,分別是 Tap(点一下)、Pinch(二指往內或往外拨动)、Rotation(旋转)、Swipe(滑动,快速移动)、Pan (拖移,慢速移动)以及 LongPress(长按)。這些手势別在使用上也很简单,只要在使用前定义并添加到对应的视图上即可。
// 定义一个 recognizer, 并加到需要偵測该手势的 UIView 元件上 - (void)viewDidLoad {UISwipeGestureRecognizer* recognizer;// handleSwipeFrom 是偵測到手势,所要呼叫的方法 recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleSwipeFrom)];// 不同的 Recognizer 有不同的实体变数// 例如 SwipeGesture 可以指定方向// 而 TapGesture 則可以指定次數 recognizer.direction = UISwipeGestureRecognizerDirectionUp[self.view addGestureRecognizer:recognizer];[recognizer release];}- (void)handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer {// 触发手勢事件后,在这里作些事情// 底下是刪除手势的方法 [self.view removeGestureRecognizer:recognizer];}
问题來了。有些手势其实是互相关联的,例如 Tap 与 LongPress、Swipe与 Pan,或是 Tap 一次与Tap 兩次。当一個 UIView 同时添加兩个相关联的手势时,到底我这一下手指头按的要算是 Tap 还是 LongPress?如果照預设作法来看,只要「先滿足条件」的就会跳出并呼叫对应方法,举例来说,如果同时注册了 Pan 和 Swipe,只要手指头一移动就会触发 Pan 然后跳出,因而永远都不會发生 Swipe;单点与双点的情形也是一样,永远都只会触发单点,不會有双点。
那么这个问题有解吗?答案是肯定的,UIGestureRecognizer 有个方法叫做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]; }
UIview 添加触摸.手势相关推荐
- UI之摇晃手机和触摸手势
摇晃手机 -(void)motionBegan:(UIEventSubtype)motionwithEvent:(UIEvent *)event//摇晃触发.[UIViewanimateWithDur ...
- Android 触摸手势基础 官方文档概览
触摸手势检测基础 手势检测一般包含两个阶段: 1.获取touch事件数据 2.解析这些数据,看它们是否满足你的应用所支持的某种手势. 相关API: MotionEvent 兼容版的: MotionEv ...
- iOS 手写键盘与触摸手势冲突,导致崩溃闪退
问题描述: 在iPhone上调用键盘,用键盘输入时正常没有任何问题,但切换成手写输入法之后,写第二个字的时候会出现闪退崩溃的现象.其原因就在于手写键盘的事件与触摸手势的事件发生了冲突. 解决方案: 扩 ...
- iOS添加边缘手势( UIScreenEdgePanGestureRecognizer)实现侧滑效果
通过添加边缘手势来实现侧滑的效果,类似于qq界面的边缘侧滑 ,亦或广告界面的侧滑 @interface中定义一个全局view @property(nonatomic,weak)UIView *adVi ...
- 移动开发框架,第【二】弹:Hammer.js 移动设备触摸手势js库
hammer.js是一个多点触摸手势库,能够为网页加入Tap.Double Tap.Swipe.Hold.Pinch.Drag等多点触摸事件,免去自己监听底层touchstart.touchmove. ...
- 《精解 Windows 10》——2.10 触摸手势
本节书摘来自异步社区<精解 Windows 10>一书中的第2章,第2.10节,作者:李志鹏著,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.10 触摸手势 ...
- ipados远程linux软件,JingOS Linux平板系统v0.6下载发布 支持多点触摸手势
原标题:JingOS Linux 平板系统 v0.6 下载发布:iPadOS 风格,附安装方法 1月29日消息 今年1月份,一款新的操作系统 JingOS 官网上线,官方介绍是全球首个 iPadOS ...
- art-pi lvgl添加触摸事件部分代码
art-pi lvgl 添加触摸事件部分代码 文档说明 该文章仅供学习参考使用,非官方使用说明文档. littlevgl2rtt 介绍 上一篇文章(art-pi添加lvgl支持包)简单描述了如何在 a ...
- OpenGL ES 2.0 for Android教程(九):添加触摸反馈
OpenGL ES 2 第九章:添加触摸反馈 文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(二) OpenGL ES ...
最新文章
- android studio同步代码块,Android Studio快捷键大全
- poj 3660 Cow Contest
- PHP 自学教程之MySQL数据库
- mysql索引执行计划_第六章· MySQL索引管理及执行计划
- Python从键盘输入多行文本数据的方法
- 爬虫前期知识的储备(二)
- java哈希映射干什么的_java – 为什么在哈希映射中有空值或空键是有用的?
- 关于python中的字符串编码理解
- Unix文件系统基本概述
- 网页抓取软件-免费网页自动采集抓取任意内容软件
- 【解决方案】Ehome协议视频融合平台EasyCVR在危化行业的安防监控应用
- 实战OpenPose项目1:开篇使用文档
- 软考软件设计师下午真题-面向对象的程序设计与实现-访问者设计模式(2015年上半年试题六)Java代码讲解
- Windows and CentOS IPv4转IPv6隧道方法
- React Native 填坑记录01
- 字幕制作 分享剪辑视频添加滚动字幕的操作步骤
- python控制excel打印_python对excel表格的操作
- 【matlab实现多种股票数据同列收盘价格分析走势图,以及涨跌幅变化曲线第二篇】
- 宝塔一键安装部署tipask登录出现错误:The email must be at least 8 characters怎么回事
- Linux下的桥接模式