美文网首页
iOS-响应链

iOS-响应链

作者: 李永开 | 来源:发表于2019-02-11 14:33 被阅读0次

一.响应链

简单来说包括两方面:1.事件传递 2.处理响应

二.事件传递

  1. 点击屏幕
  2. UIApplication
  3. UIWindow
  4. 调用- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event判断那个view应该处理这个事件
  • - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event内部实现
    1.for循环拿到所有子视图,越后面添加的越先判断
    2.如果isHidden=YES或者userInteractionEnabled=NO或者alpha<0.01返回nil
    3.调用- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

三.处理响应

找到点击的view后,来到了响应者链

  1. 该view处理事件
  2. 如果view不处理,那么将事件发送给它的父视图
  3. 父视图的viewcontroller
  4. UIVindow
  5. UIApplication
  6. Delegate
  7. 丢弃该事件

更加详细

苹果注册了一个 Source1 (基于 mach port 的) 用来接收系统事件,其回调函数为 __IOHIDEventSystemClientQueueCallback()。
当一个硬件事件(触摸/锁屏/摇晃等)发生后,首先由 IOKit.framework 生成一个 IOHIDEvent 事件并由 SpringBoard 接收。这个过程的详细情况可以参考这里。SpringBoard 只接收按键(锁屏/静音等),触摸,加速,接近传感器等几种 Event,随后用 mach port 转发给需要的App进程。随后苹果注册的那个 Source1 就会触发回调,并调用 _UIApplicationHandleEventQueue() 进行应用内部的分发。
_UIApplicationHandleEventQueue() 会把 IOHIDEvent 处理并包装成 UIEvent 进行处理或分发,其中包括识别 UIGesture/处理屏幕旋转/发送给 UIWindow 等。通常事件比如 UIButton 点击、touchesBegin/Move/End/Cancel 事件都是在这个回调中完成的。

相关文章

  • iOS-响应链

    先说一下响应链是什么? 在我们点击屏幕时候,iOS操作系统回去用户的点击行为,把这个写包含点击事件的信息包装成UI...

  • iOS-响应链

    一.响应链 简单来说包括两方面:1.事件传递 2.处理响应 二.事件传递 点击屏幕 UIApplication ...

  • iOS-事件响应链

    App通过响应者对象来接收和处理事件,响应者对象都是UIResponder的子类对象,常见的UIView,UIVi...

  • iOS-响应链(Responder Chain)

    iOS-响应链(Responder Chain) 工作接近一年,很久没有更新博客。工作中学到很多知识点后面将花时间...

  • UIControl && UIGestureRecognizer

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

  • iOS中对于响应链的理解

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

  • 基于ResponderChain的事件传递

    ResponderChain对象交互方式本质 响应者链简介 Responder Chain也就是响应链,响应者链是...

  • iOS文档补完计划--UIResponder

    目录 UIResponder 响应链 管理响应者链nextResponderisFirstRespondercan...

  • iOS事件传递过程以及响应链

    响应者响应者为响应事件的UIResponder子类对象,如UIButton、UIView等 响应链响应链是由链接在...

  • iOS-生命周期、响应链相关

    本篇涵盖生命周期、响应链等. 1.iOS应用的生命周期2.iOS触摸事件全家桶3.点击 Run 之后发生了什么?4...

网友评论

      本文标题:iOS-响应链

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