美文网首页
iOS响应者链

iOS响应者链

作者: 倒骑毛驴看风月 | 来源:发表于2018-03-12 11:52 被阅读82次

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

相关文章

  • iOS 响应链

    iOS开发 - 事件传递响应链iOS 响应者链,事件的传递事件传递之响应链Cocoa Touch事件处理流程--响...

  • iOS响应者链

    iOS响应者链

  • ios响应者链

    iOS 响应者链 字数418 阅读41 评论0 喜欢3 响应者链 响应者链是一个响应者的连接序列,事件或者动作消息...

  • iOS UI事件传递与响应者链

    iOS UI事件传递与响应者链 响应者链 响应者对象:继承自UIResponder的对象称之为响应者对象。UIAp...

  • 转载:响应者链工作原理

    响应者链 响应者链是由一个一个响应者组成的长链;响应者链定义了iOS中触摸事件的交互规则;如果hit-test检测...

  • 事件的分发和传递

    响应者: 在iOS中,响应者为能响应事件的UIResponder子类对象,如UIButton、UIView等。 响...

  • iOS中对于响应链的理解

    对于响应链的理解: 在IOS中,有响应者链对事件进行响应,所有的响应类都是UIResponder的子类,响应者链是...

  • 二、事件传递链和响应者链

    iOS触摸事件详解iOS开发-事件传递响应链 响应者链 UIResponser包括了各种Touch message...

  • iOS 响应者链

    一个目前最新最全的分析 iOS事件处理,看我就够了~ 对响应者链机制的图文分析 深入浅出iOS事件机制 对响应者链...

  • iOS基础篇-事件处理

    1、首先需要理解iOS事件处理机制 理解事件处理、响应者、响应者链概念https://developer.appl...

网友评论

      本文标题:iOS响应者链

      本文链接:https://www.haomeiwen.com/subject/balnfftx.html