所有继承响应者对象UIResponder都能接收并处理事件。按照时间顺序,先找到到最合适的view,然后就会调用view的touches方法,这些方法的默认做法是将事件顺着响应这链条向上传递,将事件交由上一个响应者进行处理,直到有一个view能处理该响应为止或者丢弃。这是一个从上到下,再从下到上的过程。
1. 事件的产生
2. 事件的传递
事件的传递先从父控件传递到子控件(UIApplication->window->寻找处理事件最合适的view)。
如果父view不能接受触摸事件,那么子view也不能接收到触摸事件。
2.1 如何找到最合适的view来处理事件
判断keywindow自己是否接受事件
判断事件是否在自己身上
子view数组中从后往前遍历子控件,重复前面1,2步骤
如果没有合适的子控件,那自己就是最合适的控件
2.2 寻找最合适的view底层剖析
有两个重要的方法:
- hitTest:withEvent:
- pointInside:withEvent:
view会调用hitTest:withEvent:方法,hitTest:withEvent:方法底层会调用pointInside:withEvent:方法判断触摸点是不是在这个view的坐标系上。如果在坐标系上,会分发事件给这个view的子view。然后每个字view重复以上步骤,直至***层的一个合适的view。
3.事件的响应
事件响应会先从底层最合适的view开始,然后随着上一步找到的链一层一层响应touch事件。默认touch事件会传递给上一层。如果到了viewcontroller的view,就会传递给viewcontroller。如果viewcontroller不能处理,就会传递给UIWindow。如果UIWindow无法处理,就会传递给UIApplication。如果UIApplication无法处理,就会传递给UIApplicationDelegate。如果UIApplicationDelegate不能处理,则会丢弃该事件。
11月22日消息,日前微信微信 7.0.9内测版更新,主要更新内容有以下几点: 1、支...
2019年6月工信部正式为中国移动、中国联通、中国电信以及中国广电四家企业发放5G...
2020年是充满动荡的一年,组织面临着众多挑战。进入2021年,人工智能行业将会快...
机器学习算法如何在后台运行是很多人都不了解的一个方面。CNN层会看到什么?反向...
最近,网上传言某手机混用闪存,将UFS 3.0和UFS 3.1的闪存混用在了同一型号的机...
【51CTO.com原创稿件】本周六,昇腾学院技术开放日系列活动即将打卡美丽的苏州。...
对于数据中心运营,可能很难确定哪些数据至关重要,哪些数据是背景噪音。筛选数...
据外媒CNET报道,英国政府制定了一个路线图,在2027年的最后期限前,将包括华为...
2019年8月5日,携号转网进入落地阶段。 2019年11月10日,三大运营商携号转网服务...
微信从2011年发布开始已将近10年,当时对于微信不熟悉的朋友微信号命名千奇百怪...