iOS响应者链

iOS事件传递

不管iOS还是android,如果没有交互(可以响应用户操作),则不会吸引用户。万千世界中,则没有绝对静止的事物,只有相对静止的事物,也正是因为,事物处于动的状态中,一切才看起来那么美妙。

今天是复习,iOS响应者链。

何为响应者链,即iOS通过层级关系,把每个展示给用户的界面,进行管理起来,每个界面即是响应者链中的每个部分,有局部组成全局,则称之为链,那么响应者呢?又是什么意思?顾名思义,就是可以响应用户行为的或者可以动起来的组建。这些组件,直接或间接继承与uirespond,而UIrespond类本身里面定义了,四个处理用户行为的方法,正因为,响应者链中的组建,直接或间接继承UIrespond,所以才可以响应用户的操作。

用户点击,iOS屏幕,这个时候,iOS设备以及系统会把知道,用户要进行操作,从而把用户行为,封装为,iOS系统可以识别的事件,放到,iOS事件管理队列里面(iOS队列,具有fifo原则),然后呢,iOS就会找到当前活跃的application,接下来,事件分发队列就要把这些事件进行分发到当前活跃的application(即app)中。那iOS怎么通过事件分发队列分发给当前活跃的app呢?则是通过sendevent这个方法,来进行事件最初分发。

分发的顺序是,从最底部视图,向上分发,而分发的过程也是找寻最佳响应者的过程

UIapplication->UIwindow->so on...,在这个事件分发的过程中,系统会调用hit-test以及pointinside来进行响应者的寻找。在hit-test方法里面,调用pointinside方法,判断从iOS事件分发队列传过来的点是否在这个视图里面,如果在这个视图里面,并且这个视图处于可交互状态,则会进行一个递归的找寻该视图的子view的过程,重复调用pointinside 和 hit-test方法,直到找到最佳的视图,作为响应者来响应iOS事件分发队列传过来的,event。响应者响应event,是通过touchesbegin等方法来响应的。

注意:如果这个时候,该最佳响应者有UIgesutrere..,则会先让该手势响应该事件,如果该手势未响应该事件,则会在调用touchesbegin等方法。

找到了,最佳响应者,最佳响应者,要开始干活了,处理用户的操作行为,传递过程结束。但是这个时候,如果该最佳响应者并未响应该事件,那么这个事件又会沿着,响应者链重相反的方向进行传递,这个时候的顺序的就是:最佳响应者视图 传递该事件到 其父视图,父视图如果没有响应,则该视图,又会携带该事件传递到该视图的父视图里面

topestview->superview->superview-> so on


既然知道了,iOS响应用户行为的过程,是响应者链递归找寻最佳视图,传递point和event的过程,那么这个时候,就可以进行事件的拦截,想让哪个响应者响应该事件就让哪个响应者响应该事件

注意:必须处于同一个响应者链条


点击黄色视图,如果想让蓝色视图,或者橙色视图,响应该事件,则可以从写hit-test/pointinside方法

iOS中滚动视图的嵌套:

iOS滚动视图,里面包含了,uigesture子类,当用户点击或者滑动滚动视图的时候,UIgesture,是最先会进行事件的响应,比如:pan,pinch。

多个滚动视图,进行嵌套的时候,需要对手势处理得当,即让哪个滚动视图滚动,那就让哪个滚动视图滚动,即从写滚动视图,修改滚动视图的手势代理方法,同时也可以修改hit-test和pointinside方法,进行灵活多变的操作。

注:iOS响应事件通过touchesbegin,用户的滑动,点击,双击等等操作,都需要开发者,进行判断,处理起来较为复杂。因此苹果才推出UIgesture,来简便开发者对手势的处理,意思就是:拿来用就行,比如过,点击:tap手势来处理,不用在重新放到touchesbegin来进行判断

iOS响应链,构成了,iOS的一切,iOS的与用户的操作,正式因为有了,响应者链,app才会那么多姿多彩。里面的学问还有很多,更重要的就是明白原理,使用原理来解决不同的问题。

demo地址:https://github.com/YongLeiCHU/ScrollView-insert-TableView

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