IOS 开发 手势使用
首先为了防止看我的博客的人刚打开就关闭,所以就先给个手势的例子
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapView:)];tapGesture.numberOfTapsRequired = 1;tapGesture.numberOfTouchesRequired = 1;[self.view addGestureRecognizer:tapGesture];
话说回来,如果直接讲例子以及如何使用函数,没多大意思,而且这种东西就成了记单词,不好不好实在不好,了解下机理,那就不用背单词了,不论怎样变都无所谓了。上个博客讲了事件的传播途径和顺序。那么本次就说说如何在这样的大前提下,做些设置来适应特殊的需求。
首先来讲一下手势的识别和touch事件和处理手势的target之间的关系。如下图:
当用户触摸屏幕,会有touchbegin 事件,然后触摸也可以移动,也会有touchmove,然后离开就会有touchend事件,总的来说touch事件有一下三个阶段:
- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer
- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventingGestureRecognizer
这两个函数是类方法,返回值为BOOL,canPreventGestureRecognizer,这个函数返回YES就说明这个手势可以在和其他的手势在一起出现recognized状态的时候,其他手势不能向其target发布识别消息。canBePreventGestureRecognizer刚好相反。然后这两个被访问后,得到的结果不是最后结果。还要继续访问其他的代理函数,如果其他的代理函数允许他们一起响应,那么他们也是会一起响应的,比如(2)中
(2),再访问
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
这个函数也返回YES,就表明两个手势可以同时触发,不过这个函数在两个手势之间会被调用两次,但参数顺序会变,只要有个次返回YES,那么就表明这两个手势可以同时识别。这个就是区别于(1)中的两个函数,他们是单向的。
(3),[A requireGestureRecognizerToFail:B];(1),(2)完成后会查看这个依赖,三部完成后,决定那个手势该发给其代理函数消息。
gestureRecognizerShouldBegin:gestureRecognizer:shouldReceiveTouch是当iOS访问在传递touch事件之前会询问手势的代理,问是否要传递touch事件给这个手势。默认为YES,表明是传,为NO的话,表明是不传,不传就表明手势的状态是不可能发生改变的,也就是说手势就当什么也没发生过。
手势的几个属性
(1)cancelsTouchesInView这给属性是默认为YES,其是当手势被识别的时候,是否取消touch事件传递给手势所关联的view
(2)delaysTouchesBegan默认为NO,这个属性的作用是,当手势在分析touchbegin,和touch move时,但是手势还没有分分析出来是识别还是不识别,也就是手势的状态为possible状态,当这个属性为YES,那么系统会先挂起(不丢去)touch事件,然后继续当手势识别失败了,系统会将失败之前的touch事件全部传递给view。当为NO时,就是实时的每一次view都会收到touch事件,但除了touchend外。
(3)delaysTouchesEnded默认为YES,当其为YES时在手势在UITouchPhaseEnded阶段,当手势识别成功了后,view就是收到touch canceled的事件,失败后会收到touched,当其为NO,手势在分析end消息时,view就受到了这个消息。
总结,有事件的传输路径和次序,已经由ios规定好了,那么以上的方法也就是在这个基础上做的,有的事在将要通知手势发生了touch事件前,有的事之后。总之,分析手势的时候一定时时刻刻想到touch事件的传播。
好了手势的使用基本上将的差不多了,希望大家能多提意见
IOS 开发 手势使用相关推荐
- iOS开发——手势识别器(用手势实现图片旋转和缩小放大)
iOS开发中,除了有关触摸的这组方法来控制用户的手指触控外,还可以用UIGestureRecognize的衍生类来进行判断,方便了开发. UIGestureRecognize的子类类别有以下几种: U ...
- iOS开发--下滑返回dismiss
简介 现在越来越多的应用有看大图或者进入详情页面,但是,再返回的时候,普通意义上,会点击左上角的返回,这时候你就会发现,还需要将手指移动到左上角,这样,无意给用户增添了麻烦,并且,现在手机屏幕越来越大 ...
- ios开发学习-手势交互(Gesture)效果源码分享
qianqianlianmeng ios开发学习-手势交互(Gesture)效果源码分享 All Around Pull View 介绍:实现视图四个方向(上下左右)都能够拖动更新(pull to r ...
- IOS开发基础之手势解锁项目案例
IOS开发基础之手势解锁项目案例 项目最终实现效果. 由于缺少红色的error背景图.我自己从安卓项目找到一个手势解锁,然后通过ps添加粉红色的红圈,才得以解决.为了分享给大家源码,github和本地 ...
- IOS开发之手势——UIGestureRecognizer 共存
IOS开发之手势--UIGestureRecognizer 共存 在 iPhone 或 iPad 的开发中,除了用 touchesBegan / touchesMoved / touchesEnded ...
- iOS开发中手势处理简介(二)
iOS中手势操作事件的产生于传递 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中 UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处 ...
- iOS开发系列--让你的应用“动”起来
概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...
- iOS开发之让你的应用“动”起来转写
在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画.动画 ...
- Xamarin iOS开发实战中册 (内部资料)C#苹果应用开发
Xamarin iOS开发实战中册 (内部资料)C#苹果应用开发 Xamarin iOS开发实战中册 (内部资料)C#苹果应用开发 试读样章下载地址:http://pan.baidu.com/s/1j ...
最新文章
- vue组件的传参练习
- java查看文件夹下文件夹大小,java 获取文件夹大小,文件大小,文件个数
- 力扣——所有可能的满二叉树
- 手机与笔记本蓝牙配对
- oracle服务器找不到怎么解决,简析Oracle数据库常见问题及解决方案
- 使用ThreadPoolExecutor并行化独立的单线程任务
- python输出星号等腰三角形_python输出星号字符组成的等边三角形
- 用户权限管理shiro
- cocos2dx学习:TexturePacker的使用
- (一)数据结构和算法、线性结构
- LupoScan | 实景化点云数据处理软件
- mac地址查 计算机名字,怎么看mac地址-教你通过MAC地址查询设备的厂商名称
- 伍德里奇计量经济学导论pdf_伍德里奇 计量经济学导论(第六版) 第3章
- Iframe中,弹出层屏幕垂直居中
- 揭密中国500岁世外异人的真实生活
- 五步恢复XP系统“桌面清理向导”
- RxJava模式与原理-----标准观察者与RxJava观察者
- 共享经济思考:标准化与个性化如何融合
- 什么是云数据库?这篇文章详细告诉你!
- [连接 Android ]-使用 adb 命令行通过数据线进入安卓手机系统