响应者链条

http://www.jianshu.com/p/77a1b6e5194d

 

事件的产生和传递

 

 

 

在iOS中凡是继承自UIResponder的对象都能够接收并处理事件。

用户手指触摸屏幕一个view时候,系统会把该事件加入UIApplication管理的事件队列中去,这个队列是先进先出的,然后UIApplication会从事件队列中去除最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow),主窗口会在视图层次结构上面找到一个最合适的视图来处理触摸事件,这是整个事件处理的第一步,找到合适的视图控件之后,他就会调用试图的touches方法来处理事件

 

查找最合适处理事件的视图

 

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event这个方法就是用来查找最合适处理事件的方法,这个方法可以和- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;配合使用,后面这个方法就是用来判断触摸点是否在其身上,返回一个BOOL值
我们可以重写- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event这个方法,自己来模仿父类是如何处理找到最合适的视图的。当然我们也可以调用父类的这个方法,这样重写就没什么作用了。

 

响应者链条

响应者链条就是由多个响应者对象连接起来的链条,它的作用就是让我们能够清楚的看见每个响应者之间的联系,并且可以让一个时间多个对象处理
响应者链条是怎么个样子呢,我们可以看下这两个图

 

补充:

找到合适的view是从UIApplication->Window向上查找的

touchbegan是从上向下传递的 view ....>window > UIapplication

如果重写了touchbegan则不向下继续传递, 如果需要传递需要调用super touchubegan方法

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值