iOS GestureRecognizer与UIResponder touch事件响应

在iOS中UIView是继承于UIResponder的,而UIResponder是专门用来响应用户的操作处理各种事件的,包括触摸事件(Touch Events)、运动事件(Motion Events)、远程控制事件(Remote Control Events,如插入耳机调节音量触发的事件),而很多我们常用的类也继承于UIResponder(UIApplication、UIView、UIViewController).

而以下几个方法

@interface UIResponder : NSObject
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;//触摸屏幕
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;//在屏幕上移动
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;//离开屏幕
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

是响应触摸事件的方法,我们可以利用这几个方法自定义自己的手势。当然Apple也为我们提供了几个基础的封装的手势提供使用(了UIGestureRecognizer手势识别)

这里并不深入研究手势的响应和传递,而是研究下几个基础的手势和touchs的关系,这里主要利用这几个内置的手势方法:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];
[self addGestureRecognizer:tap];//点击

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];
[self addGestureRecognizer:pan];//平移,慢速移动

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];//滑动,快速移动
[self addGestureRecognizer:swipe];

UILongPressGestureRecognizer *longG = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];//长按
[self addGestureRecognizer:longG];
屏幕快照 2018-07-30 上午9.19.35.png

蓝色部分就是需要添加手势的view,我们分别添加上述的手势进行测试,同时实现touchs触摸相关方法

屏幕快照 2018-07-30 上午9.39.21.png

首先是UITapGestureRecognizer的方法执行顺序

屏幕快照 2018-07-30 上午9.21.30.png

很容易理解,因为只是tap单击事件,所以在检测到begin touch时手势事件就开始响应,同时并不会有move动作

然后是UIPanGestureRecognizer

屏幕快照 2018-07-30 上午9.22.03.png

pan手势是检测move的,所以在touch move有响应时,pan手势也进行响应

UISwipeGestureRecognizer

屏幕快照 2018-07-30 上午9.23.14.png

UILongPressGestureRecognizer

屏幕快照 2018-07-30 上午9.23.34.png

通过以上测试表明系统内置的手势事件是对UIResponder touch事件的监测封装,通过不同的计算得出是否触发了某个手势,而根据不同的手势,触发的时机也不同。通过UIResponder,我们也可以自定义自己的手势,通过模拟系统手势很容易就能实现.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 58,627评论 51 604
  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 6,180评论 4 26
  • 触摸事件的生命周期 当我们手指触碰屏幕的那一刻,一个触摸事件便产生了。经过进程间通信,触摸事件被传递到合适的应用之...
    Gintok阅读 1,448评论 0 3
  • 在开发过程中,大家或多或少的都会碰到令人头疼的手势冲突问题,正好前两天碰到一个类似的bug,于是借着这个机会了解了...
    闫仕伟阅读 5,573评论 2 23
  • 《找到问题的根源》 如果你觉得团队的某个人有问题,直接去找那个人,并要求与他谈话。从...
    新民李健阅读 396评论 0 0