美文网首页ios开发
ios responder响应者链,事件传递规则

ios responder响应者链,事件传递规则

作者: jacknathan | 来源:发表于2018-01-17 18:20 被阅读0次

当我们手指点击屏幕时,iphone os会用点击的信息和类型生成一个UIEvent对象放入应用程序的事件队列中。然后UIApplication单例对象从队列中顶部取出,调用当前窗口UIWindow对象的hitTest:withEvent:方法, 看看当前点击的点是不是在window内, 如果是则逆序遍历(后加载的先遍历,因为后加载才最靠前front,这样优化了查找效率)subview的hitTest:withEvent:方法,如果其中一个subview的hitTest:withEvent:方法返回了接收事件UIView,那么就不会继续传递给剩下的其他subview。

hitTest:withEvent:方法的内部实现如下:

hitTest:withEvent:

注:hitTest内部主要是一个pointInside:withEvent:方法,该方法和hitTest一样都是UIView的方法,通过该方法可以判断point是否落在view的bound范围内

hitTest寻找响应View的路径:

UIApplication分发事件(sendEvent方法)->UIWindow->View(rootController的View)->Subview(有可能childViewController的view)->Subview->Subview........ 直到找到响应view为止。

touch响应方法:

当通过hitTest找到响应View之后,就会调用该View(继承UIResponder)的下列方法

touch 响应事件

官方文档里面解释了这几个方法,the default implementation of this method forwards the message up the responder chain. 意思就是这些方法的默认实现是把touch事件通过响应者链进行传递

响应者链:

view(之前通过hitTest找到的相应view)->superView->...->UIViewController的view->UIViewController->ParentController的view->parentController->...->RootController的view->RootController->UIWindow->UIApplication->AppDelegate

那么一个UIResponder是如何将事件传递给响应者链的下一个对象的呢,其实靠的是UIResponder的一个只读属性串联起来的,如下图

UIResponder next属性

当一个view被addSubview到superView时,view的next就指向superView, UIViewController的View的next指向viewController, 而UIViewController的next指向parentController的View,如果是rootViewController那么next指向UIWindow

相关文章

  • iOS 响应链

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

  • ios responder响应者链,事件传递规则

    当我们手指点击屏幕时,iphone os会用点击的信息和类型生成一个UIEvent对象放入应用程序的事件队列中。然...

  • iOS 事件传递&响应者链

    iOS中的响应者链(Responder Chain)是用于确定响应者的一种机制。其中的事件主要指触摸事件(Touc...

  • 二、事件传递链和响应者链

    iOS触摸事件详解iOS开发-事件传递响应链 响应者链 UIResponser包括了各种Touch message...

  • iOS响应者链

    参考好文 iOS开发-事件传递响应链,用运行时分析 iOS事件传递:响应者链[译] http://www.jian...

  • iOS UI事件传递与响应者链

    iOS UI事件传递与响应者链 响应者链 响应者对象:继承自UIResponder的对象称之为响应者对象。UIAp...

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

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

  • iOS响应者链、事件的传递

    1、响应链的传递 Responder一点也不神秘————iOS用户响应者链完全剖析(建议全看)看完上面一篇应该能完...

  • iOS 响应者链 整理

    一、响应者链(Responder Chain) 先来说说响应者对象(Responder Object),顾名思义,...

  • 转载:响应者链工作原理

    响应者链 响应者链是由一个一个响应者组成的长链;响应者链定义了iOS中触摸事件的交互规则;如果hit-test检测...

网友评论

    本文标题:ios responder响应者链,事件传递规则

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