wordpress站群模板,网站建设免费建站,响应式网站视频,企业软文事件传递链和响应者链总结 1. 事件传递链#xff1a;事件传递链#xff1a;传递流程#xff1a;总结第一响应者#xff1a; 2. 响应者链响应者链传递流程总结响应者链流程 总结#xff1a; 之前也学习过这个内容这次在复习的时候#xff0c;就想着写一下总结#xff1a;… 事件传递链和响应者链总结 1. 事件传递链事件传递链传递流程总结第一响应者 2. 响应者链响应者链传递流程总结响应者链流程 总结 之前也学习过这个内容这次在复习的时候就想着写一下总结 初始事件传递链和响应者链
1. 事件传递链
事件传递链
将用户在应用程序中的进行交互的事件发送到视图层次中的适当对象。在这个事件的传递过程中从根视图开始查找并递归向下查找最合适的处理该事件的视图第一响应者。
传递流程
事件产生 用户通过与设备交互生成事件系统将事件传递给引用的UIApplication实例以开始事件分发。UIApplication事件分发UIApplication实例将事件传递给当前的UIWindow对象进一步查找适合的响应者。UIWindow事件分发当前UIWindow通过调用hitTestwithEvent方法来遍历整个视图层次结构找到合适的视图来响应工作。命中测试(hitTest:withEvent:) **hitTest:withEvent:是寻找第一响应者的核心方法。**它通过以下步骤工作 检查当前视图的属性隐藏hidden NO交互userInteractionEnabledYES、透明度alpha0.01三者都满足才能拥有响应的能力。调用pointInside:withEvent:确定触摸点是否在当前视图的边界范围内。从后往前遍历子视图递归调用子视图的hitTest:withEvent:方法。直到找到合适的子视图返回子视图作为第一响应者否则返回当前视图本身。 第一响应者确定如果确定了当前触摸点在当前视图上同时当前视图没有任何子视图那么当前视图就成为第一响应者并开始处理触摸事件。
相应的大致流程过程UIKit – active apps event queue – window – root view – …… – lowest view 事件传递的本质就是为了让我们找到第一响应者。
总结第一响应者
能够响应触摸事件触摸点在自己的边界范围内没有任何子视图或者所有子视图都不在触摸点上。
2. 响应者链
响应者链
在事件传递链中找到了第一响应者但是第一响应者不一定可以响应事件因为他可能没有实现触摸事件。
传递流程
对于响应者链的传递流程可以通过下面这张图来看 左边的app响应者链
初始视图对象尝试对事件进行处理如果无法处理就将事件传递给父视图对象。在视图树初始视图并不是最顶端的视图。父视图也会进行同样的尝试因为相同的原因只能将事件继续向上传递。视图控制器中最顶层的视图也进行相同的尝试结果处理不了就会传递给视图控制器。视图控制器也一样无法处理于是继续向上传递给主窗体对象window。主窗体也无法处理就会继续传给app的单例实体对象。最后单例实体对象没有处理就会将事件丢弃掉。
右边的app响应者链
视图将事件沿着视图控制器的视图树向上传递直到最顶端的视图。顶端的视图无法处理就直接交给视图控制器。视图控制器无法处理就将事件传递给其顶端视图所在的父视图重复13知道到达最顶端的跟视图控制器。跟视图控制器将事件传递给主窗体对象。主窗体对象传递给app的单例实体对象。
总结响应者链流程
判断当前视图能否响应再去判断当前视图的nextResponder如果是VC的View那么nextResponer就是VC。
如果不是控制器的View上一个响应者就是SuperView。
相应的大致流程过程第一响应者-super view-......-ViewController-window-application
总结
触摸事件发生之后系统会生成简单的UIEvent。将UIEvent产生的事件添加到UIApplication队列中。然后UIApplication将事件分发给UIWindow主窗口会在视图层次中找到合适的视图处理触摸事件。不但递归调用hitTest方法来确定第一响应者。如果第一响应者无法响应事件就按照响应者链往上传递传递给父视图。一直传到UIApplication如果都没有响应则事件丢弃。