一、事件的产生和传递
1.事件的产生和传递
1)涉及到的两个方法
2)响应者链条
这个东西呢,比较绕,然后我们接下来一块儿来看一下啊,
我们把上午最后的一份代码,复制粘贴一下,改个名字,叫做“05-事件的产生和传递”,
首先,我们上午说了一下,这个hit test这个方法,还有那个touchesBegan:那个方法,
1)hit test:这个方法,我们现在应该知道的,是,它是从下往上找的这么一个过程,
2)touchesBegan:是从上往下传的这么一个过程,
大家先知道这一点,
看一下我们的ppt啊,
事件的产生和传递,
传递啊,
消息循环
运行循环,
拿这一幅图,就可以啊,我们这个里边儿啊,我们在点击某一个view的时候,会产生一个触摸事件,还是上午说的,系统只是知道你现在摸到屏幕了,然后,这个时候,它会产生一个触摸事件,这个触摸事件,会添加到运行循环当中,什么是运行循环,就是我们上午所说,ApplicationMain的这个死循环啊,就是这个循环,
这个死循环,实际上,就是我们所说的运行循环,
当你一点击屏幕的时候,发生了一个触摸事件,触摸事件会添加到运行循环当中,它会从下往上来找,
先找Application,
1)先找Application,也是一个响应者对象啊,通过hit test,先看看它,是不是合适处理这个事件,如果不是的话,如果不是的话,再往上去找,
2)然后,Application,会去找到Window,
3)Window,再去找到你的根控制器,RootViewController,
4)根控制器,再去找你的view,也就是我们所说的控制器的view,
5)控制器的view,再往上找,再找你的子控件,如果你的子控件,找到了的话,它会从上往下,再去执行touchesBegan:
hit test:是从下往上找,合适的控件,去处理,这么一个过程,
这里没有啊,看我们这个代码,在这个BaseView里边,
我在这块儿呢,写了一个hitTest方法,
- (UIView *)hitTest:(CGPoint ) point withEvent:(UIEvent *)event{
NSLog(@“%@------hitTest:”,[self class]);
return [super hitTest:point withEvent:event];
}
我在这里边,写了一个这个hitTest方法,
然后呢,这个hitTest:方法,内部的一个参考实现,
写到这儿了,
这个里边,仅仅是hitTest:方法的参考的一个实现啊,至于说它的源代码是不是这么写的,那另说,
只不过我们达到的效果,确实是这个样子的,
首先,我们先把这个hitTest:打开注释啊,
这是系统的hitTest:
我们先来看一下它都是怎么样调用的,先command + R,
在这个里边儿啊,我们先不要管下面的这一张图片,
1)当我点击这个紫色view的时候,我们说,是从下往上找,它是怎么找的,就是说,我们点击紫色的view的时候,
白色的执行:hit test:
紫色的执行:hit test:
紫色的执行:touchesBegan:
白色的执行:touchesBegan:
我们从我选中的这个部分开始来看,