iOS:事件传递,响应者链传递机制

2018-08-29  本文已影响12人  KevinChein

如何寻找最合适的view:事件传递

产生触摸事件->UIApplication事件队列->[UIWindow hitTest:withEvent:]->返回更合适的view->[子控件 hitTest:withEvent:]->返回最合适的view
小码哥课件.png

响应者链的事件传递过程:

应用:拦截事件的处理,拦截事件的传递过程

想让谁成为最合适的view就重写谁自己的父控件的hitTest:withEvent:方法返回指定的子控件,或者重写自己的hitTest:withEvent:方法 return self。但是,建议在父控件的hitTest:withEvent:中返回子控件作为最合适的view!原因在于在自己的hitTest:withEvent:方法中返回自己有时候会出现问题。因为会存在这么一种情况:当遍历子控件时,如果触摸点不在子控件A自己身上而是在子控件B身上,还要要求返回子控件A作为最合适的view,采用返回自己的方法可能会导致还没有来得及遍历A自己,就有可能已经遍历了点真正所在的view,也就是B。这就导致了返回的不是自己而是触摸点真正所在的view。所以还是建议在父控件的hitTest:withEvent:中返回子控件作为最合适的view!

本文转自:VV木公子(简书作者)
ps:原文链接--https://www.jianshu.com/p/2e074db792ba

上一篇下一篇

猜你喜欢

热点阅读