UIEvent、UITouch、手势等等

1.什么是UIEvent

UIEvent代表iOS系统中的一个事件,可以分为三类:UIEventTypeTouches触摸事件、UIEventTypeMotion运动事件、UIEventTypeRemoteControl远程事件。

UIEventTypeTouches触摸事件,通过点击,拖拽,缩放等等触发。

UIEventTypeMotion运动事件,通过摇晃屏幕等触发。

UIEventTypeRemoteControl通过远程事件控制,或者耳机等触发。

UIEvent继承于NSObject.

2.什么是UIResponder

在iOS当中,只有继承自UIResponder的类才能处理各种事件。

我们常用的UIView、UIViewController、UIApplication都继承自UIResponder,它们都能接收并处理事件。

@interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem, UITraitEnvironment, UICoordinateSpace, UIFocusEnvironment>

UIResponder中提供了处理上述三种UIEvent的方法,根据事件的类型有不同的处理方法。

3.什么是UITouch

当用户的一根手指触摸屏幕的时候会创建一个对应的UITouch,这个UITouch会记录手指运动的信息,比如说位置,时间,阶段等等。手指在屏幕的时候系统会更新同一个UITouch对象,如果手指离开了屏幕,这个UITouch对象就被销毁了。

我们可以发现处理点击事件的方法里有两个参数。

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

⚠️:一次完整的触摸事件只会产生一个UIEvent对象,也就是说不管手指在屏幕上怎么移动都是一个UIEvent对象。

而touches这个NSSet里面,装着的是UITouch对象,从这个里面可以看出是单点触摸还是多点触摸。也就是说两个手指同时触摸屏幕,那么touches里就有两个UITouch对象。

4.Gesture Recognizer

⚠️:如果有事件到来时,视图有附加的手势识别器,则手势识别器优先处理事件。如果手势识别器没有处理事件,则将事件交给视图处理,视图如果未处理则顺着响应者链继续向后传递。

也就是说手势识别器的优先级高于事件处理。如果手势在事件响应链中,那么手势会把这个响应链打断。

🙋🌰:比如说现在有两个view,viewb在viewa的上面,两个view都添加了手势,那么我们点击viewa的时候可以响应,但是点击viewb的时候就没有响应了,这就是因为viewa上添加了手势打断了响应链,所以viewb响应不到这个点击事件了。

5.UIControl

UIControl对于事件的处理会打破上面的规则。

🙋🌰:比如在viewa上添加了一个button,给这个button和这个views都添加了手势,那么views和button的手势都可以响应。因为UIButton继承于UIControl,也就是说如果UIButton是第一响应者,他的事件是由UIApplication直接派发的,不通过响应链传递,如果不能处理再交给响应链。

而如果是刚才那种情况,给UIButton addTarget的话,这个target是不会被响应的。

所以说这个action会因为父类的响应链被打断而无法执行,而gesture不会因为父类的响应链被打断而无法执行。

6.事件响应逻辑

当事件到来时,会通过hitTest和pointInside两个方法,从Window开始向上面的视图查找,找到第一响应者的视图。找到第一响应者后,系统会判断其是继承自UIControl还是UIResponder,如果是继承自UIControl,则直接通过UIApplication直接向其派发消息,并且不再向响应者链派发消息。

如果是继承自UIResponder的类,则调用第一响应者的touchesBegin,并且不会立即执行touchesEnded,而是调用之后顺着响应者链向后查找。如果在查找过程中,发现响应者链中有的视图添加了手势,则进入手势的代理方法中,如果代理方法返回可以响应这个事件,则将第一响应者的事件取消,并调用其touchesCanceled方法,然后由手势来响应事件

如果手势不能处理事件,则交给第一响应者来处理。如果第一响应者也不能响应事件,则顺着响应者链继续向后查找,直到找到能够处理事件的UIResponder对象。如果找到UIApplication还没有对象响应事件的话,则将这次事件丢弃。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 在开发过程中,大家或多或少的都会碰到令人头疼的手势冲突问题,正好前两天碰到一个类似的bug,于是借着这个机会了解了...
    闫仕伟阅读 5,157评论 2 23
  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 5,871评论 4 26
  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 54,730评论 51 596
  • 系统响应阶段 1.手指触碰屏幕,屏幕感受到触摸后,将事件交由IOKit来处理。 2.IOKIT将触摸事件封装成IO...
    雪山飞狐_91ae阅读 7,216评论 4 36
  • 该文章属于刘小壮原创,转载请注明:刘小壮[https://www.jianshu.com/u/2de707c93d...
    刘小壮阅读 31,914评论 32 209