iOS事件处理

作者: GSChan | 来源:发表于2016-09-27 13:32 被阅读32次

1、事件的产生及传递

发生触摸事件后,系统会将事件加入到一个由UIApplication管理的事件队列中,

UIApplication会从事件队列中取出最前面的事件,并将事件发放下去以便处理,通常先发送给应用程序的主窗口

主窗口会在视图层次结构中选出最合适的试图控件,来处理事件,这也是整个过程的第一步

找到合适的视图控件后,就会调用最合适的视图控件的touches方法来处理事件,


2、如何寻找最合适的视图控件?

自己能否接受触摸事件

触摸点是否在自己身上

从后往前遍历所有子控件,重复前两步

如果没有最合适的view,那么就自己最适合处理


3、事件的响应

    找到最合适的view后调用touches方法,系统的默认做法是沿着响应者链条向上传递

    3.1响应者链条

    由多个响应者连接而成的链条

    能清楚的观察到每个响应者之间的关系,并且可以使一个事件可以被多个对象处理

    3.2响应者

    继承自UIResponder的对象

    具备处理事件的能力

    3.3如何寻找上一个响应者

    当前的view是控制器的view,那么上一个响应者就是控制器

    当前的view不是控制器的view,那么上一个响应者就是父控件

    找到上一个响应者,继续调用上一个响应者的touches方法,以此类推


4.事件传递的完整过程

先将事件对象从上往下进行传递,(即父控件传递给子控件)找到最合适的视图控件来处理事件

调用最合适的视图控件的touches方法处理事件

如果调用了[super touches….];就会将事件顺着响应者链条往上传递,传递给上一个响应者

接着就会调用上一个响应者的touches….方法


5.响应者链条的事件传递过程

如果view的控制器存在,就传递给控制器,如果view的控制器不存在,就传递给父控件

在视图层次的最顶端如果也不能处理事件或消息,那么就将该事件传递给UIWindow对象

如果UIWindow对象也不能处理事件或消息,那么就将事件传递给UIApplication

如果UIApplication对象也不能处理事件或消息,那么就将事件丢弃


6.不能接收事件的五种方式

userInteractionEnabled == NO

hidden == YES

alpha <= 0.01

父控件不能接收事件

子控件超出父控件的尺寸

相关文章

  • iOS 事件以及手势的处理

    iOS 事件以及手势的处理 首先引用深入浅出iOS事件机制,iOS触摸事件处理详解,详解iOS触摸事件与手势识别三...

  • UI部分-事件处理

    iOS事件处理- 用户使用App产生的事件及响应方法: iOS中不是任何对象都能处理事件,只有继承UIRespon...

  • iOS事件的响应者链

    iOS 事件响应者链 1 iOS中的事件 触摸事件 加速计事件 远程控制事件 在iOS中不是任何对象都能处理事件,...

  • iOS 响应链

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

  • iOS-RunLoop浅析

    RunLoop是iOS事件响应与任务处理最核心的机制,它贯穿iOS整个系统,自动释放池,延迟处理,触摸事件,屏幕刷...

  • 《iOS事件触摸与手势》

    iOS事件触摸与手势 一、事件分发处理【由外到内】在iOS中发生触摸后,事件会加到UIApplication事件队...

  • iOS和Flutter里的事件处理

    目录先说一下事件处理里的被处理者:事件一、iOS里的事件二、Flutter里的事件然后说一下事件处理里的处理者:响...

  • iOS 事件处理机制与图像渲染过程

    iOS 保持界面流畅的技巧 iOS 处理图片的一些小 Tip iOS 事件处理机制与图像渲染过程

  • hitTest和pointInside如何响应用户点击事件

    处理机制iOS事件处理,首先应该是找到能处理点击事件的视图,然后在找到的这个视图里处理这个点击事件。处理原理如下:...

  • iOS事件处理机制

    事件类型 iOS的事件可以分为三类:触摸事件,加速计事件,远程控制事件 iOS中不是任何对象都能处理对象,只有继承...

网友评论

本文标题:iOS事件处理

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