美文网首页
iOS事件响应链条

iOS事件响应链条

作者: CoderLF | 来源:发表于2018-04-07 22:07 被阅读11次

一、响应者链

  1. 首先判断主窗口(keyWindow)自己是否能接受触摸事件
  2. 判断触摸点是否在自己身上
  3. 子控件数组中从后往前遍历子控件,重复前面的两个步骤(所谓从后往前遍历子控件,就是首先查找子控件数组中最后一个元素,然后执行1、2步骤)
  4. view,比如叫做fitView,那么会把这个事件交给这个fitView,再遍历这个fitView的子控件,直至没有更合适的view为止。
  5. 如果没有符合条件的子控件,那么就认为自己最合适处理这个事件,也就是自己是最合适的view


    响应链

二、事件传递

  1. 如果当前view是控制器的view,那么控制器就是上一个响应者,事件就传递给控制器;如果当前view不是控制器的view,那么父视图就是当前view的上一个响应者,事件就传递给它的父视图
  2. 在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理
  3. 如果window对象也不处理,则其将事件或消息传递给UIApplication对象
  4. 如果UIApplication也不能处理该事件或消息,则将其丢弃

三、处理过程

在自定义UIView为基类的控件时,我们可以重写这几个方法来进行点击回调。在回调中,我们可以看到方法接收两个参数,一个UITouch对象的集合,还有一个UIEvent对象。这两个参数分别代表的是点击对象和事件对象。

  • 事件对象
    iOS使用UIEvent表示用户交互的事件对象,在UIEvent.h文件中,我们可以看到有一个UIEventType类型的属性,这个属性表示了当前的响应事件类型。分别有多点触控、摇一摇以及远程操作(在iOS之后新增了3DTouch事件类型)。在一个用户点击事件处理过程中,UIEvent对象是唯一的
  • 点击对象
    UITouch表示单个点击,其类文件中存在枚举类型UITouchPhase的属性,用来表示当前点击的状态。这些状态包括点击开始、移动、停止不动、结束和取消五个状态。每次点击发生的时候,点击对象都放在一个集合中传入UIResponder的回调方法中,我们通过集合中对象获取用户点击的位置。其中通过- (CGPoint)locationInView:(nullable UIView *)view获取当前点击坐标点,- (CGPoint)previousLocationInView:(nullable UIView *)view获取上个点击位置的坐标点。

响应链的应用

通过重写查找事件处理者的方法来实现不规则形状点击。
最常见的不规则视图就是圆形视图

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
        const CGFloat halfWidth = 100;
        CGFloat xOffset = point.x - 100;
        CGFloat yOffset = point.y - 100;
        CGFloat radius = sqrt(xOffset * xOffset + yOffset * yOffset);
        return radius <= halfWidth;
}

相关文章

  • iOS事件响应链条

    一、响应者链 首先判断主窗口(keyWindow)自己是否能接受触摸事件 判断触摸点是否在自己身上 子控件数组中从...

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

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

  • 响应者链(Responder Chain)

    响应者链条主要分为两部分:事件的传递链条和事件的响应链条。 1、事件的传递链条: 当屏幕发生触摸事件后,系统会将事...

  • iOS-事件传递、响应者链条、事件响应

    1.响应者链条 只有继承UIResponder的对象才能够接收并处理事件,UIResponder 是所有响应对象的...

  • 01进阶之路-UI视图

    1. 事件传递机制和响应者链条 学习链接 事件传递机制iOS中的事件可以分为3大类型 1 触摸事件 2 加速计...

  • iOS事件的传递和响应(iOS响应者链条)

    iOS中的时间可以分为3大类型:iOS中的事件类型 一 . 响应者对象 在iOS中不是任何对象都能处理事件,只有继...

  • iOS事件传递及响应链

    iOS的应用中,用户与App进行交互,会产生很多事件,这些事件是如何产生,响应的链条又是怎样传递的呢,下面将会一一...

  • 响应者链条

    ** 响应者链条** 在iOS中不是任何对象都能处理时间,只有继承了UIResponder的对象才能接收并处理事件...

  • 初探iOS事件机制

    什么是响应链 响应链是一堆可以处理事件的对象构成的具有先后循序的链条。iOS 中有一个类叫做 UIResponde...

  • macOS AppKit 的事件响应简介

    在AppKit中的事件都处于一个响应的链条中,这个链条是由一个叫做NSResponder 的类定义的,这个响应链条...

网友评论

      本文标题:iOS事件响应链条

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