美文网首页
响应链和事件分发

响应链和事件分发

作者: 木子尚武 | 来源:发表于2018-05-16 16:48 被阅读9次

什么是响应链和事件分发:

  • 响应链:由响应者对象构成链状结构,能够响应点击、拖拽等事件
  • 事件分发:屏幕捕捉到触摸事件,包装成UITouch和UIEvent对象,加入到UIApplication管理的事件队列中,然后按照一定的机制先将事件分发到keyWindow,然后按照视图结构一层层分发下去,直到找到最适合view的过程。

响应者结构图:

WX20180516-162401@2x.png=100x100

事件分发和响应过程:

  • 从UIApplication对象分发事件开始,按照视图结构寻找最合适的响应者。调用的机制如下代码所示:
      // point是该视图的坐标系上的点
  - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
  {
      // 1.判断自己能否接收触摸事件
      if (self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) return nil;
      // 2.判断触摸点在不在自己范围内
      if (![self pointInside:point withEvent:event]) return nil;
      // 3.从后往前遍历自己的子控件,看是否有子控件更适合响应此事件
      NSInteger count = self.subviews.count;
     for (NSInteger i = count - 1; i >= 0; i--) {
         UIView *childView = self.subviews[i];
         CGPoint childPoint = [self convertPoint:point toView:childView];
         UIView *fitView = [childView hitTest:childPoint withEvent:event];
        if (fitView) {
            return fitView;
       }
    }
    // 没有找到比自己更合适的view
    return self;
  }

找到最合适的view后,然后调用touchesBegan: withEvent:响应点击事件,在这个方法中,我们可以拦截事件,进行操作。代码实现如下:

  - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
 
       [super touchesBegan:touches withEvent:event];
    }

相关文章

  • 响应链和事件分发

    什么是响应链和事件分发: 响应链:由响应者对象构成链状结构,能够响应点击、拖拽等事件 事件分发:屏幕捕捉到触摸事件...

  • IOS 基础(一)事件,响应链机制分析

    @[TOC](IOS 事件,响应链机制分析) 1. 事件分发和响应者链条 1.1 简述 事件分发:自上而下的由UI...

  • 面试题

    响应链: 用户点击屏幕产生事件 -> UIApplication 开始事件分发-> UIWindow-> Subv...

  • 事件处理流程--响应者链

    事件分发:自上而下响应者链:自下而上 第一响应者(First responder)指的是当前接受触摸的响应者对象,...

  • 响应者链条

    1.什么是事件响应链2.touch 事件分发3.hit-test 底层实现4.应用 1.什么是事件响应链 大多数事...

  • iOS 的事件机制

    响应链 iOS 大多数的事件分发都是依赖 UIResponder 响应链来完成,响应链是由一系列链接在一起的响应者...

  • UI事件传递&事件响应

    响应链工作原理 点击某一控件到其响应相关事件其实是分为两步:事件的传递与事件的响应 事件分发与传递:自上而下 事件...

  • UIControl && UIGestureRecognizer

    事件传递和响应链 一. 事件传递 二.响应链 响应链: 三.UIGestureRecognizer 四.cance...

  • UI响应链,事件分发,以及修改响应控件

    UI响应链,事件传递 一、事件分发(为了寻找响应事件的控件) 1.当我们点击屏幕的时候,系统会将我们的点击事件添加...

  • 事件分发和事件响应

    事件分发+响应:http://blog.csdn.net/itianyi/article/details/4844...

网友评论

      本文标题:响应链和事件分发

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