Cocoa Touch事件处理流程--响应者链

点击View E出发事件为例。


iOS系统检测到手指触摸(Touch)操作时会将其打包成一个UIEvent对象,并放入当前活Application的事件队列,单例的UIApplication会从事件队列中取出触摸事件并传递给单例的UIWindow来处理,UIWindow对象首先会使用hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,这个过程称之为hit-test view。


1   View A 是UIWindow的根视图,如果该点击事件不在View A范围内,UIWindow调用的hitTest:withEvent: 返回nil,

2   反之在该范围内,hitTest:withEvent:则调用其视图结构层级所有子视图的pointInside:withEvent:(该方法用来判断点击事件发生的位置是否处于当前视图范围内,以确定用户是不是点击了当前视图,击的范围不再A内,因此A的pointInside:withEvent:返回NO,对应的hitTest:withEvent:返回nil,点击的范围在A内,即A的pointInside:withEvent:返回YES

3   View A的pointInside:withEvent:返回YES,则向当前视图(View A)的所有子视图(View B和View C)发送hitTest:withEvent:消息,点击的范围不再B内,因此B分支的pointInside:withEvent:返回NO,对应的hitTest:withEvent:返回nil;点击的范围在C内,即C的pointInside:withEvent:返回YES。同理,直至找到View E,则hitTest:withEvent:方法返回自身(self).















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值