你的位置:首页 > 操作系统

[操作系统]浅谈iOS触摸事件理解


iOS的触摸事件个人总结,分为两步:

第一步:是找到哪个视图上触摸

第二步:分析由谁去响应(响应者连)

1.寻找被触摸的视图原理如下图

hitText:withEvent:的方法处理流程:

首先会在当前视图view上调用pointInside:withEvent:方法来判断触摸事件是否存在当前view中,如果返回NO,则说明触摸事件不在该view范围中,hitText:withEvent:方法返回nil;如果返回YES,则说明触摸在该view中,则向该view的subViews发送htiText:withEvent:消息,所有subviews的数组遍历顺序是从后往前,直至遍历到pointInside:withEvent:返回值为非空或者遍历完所有subview结束。如果遍历有非空对象,则hitTextField:withEvent:返回该对象结束;如果遍历完没有非空对象,则返回自己(self)。

 

2.响应者原理如下图

首先会在触摸view上调用inital view方法,看能否处理此事件,如果不能则会将事件传递给其上级视图(inital view的superView);如果上级视图仍然无法处理则会继续往上传递;一直传递到视图控制器view controller,首先判断视图控制器的根视图view是否能处理此事件;如果不能则接着判断该视图控制器能否处理此事件,如果还是不能则继续向上传递;(对于第二个图视图控制器本身还在另一个视图控制器中,则继续交给父视图控制器的根视图,如果根视图不能处理则交给父视图控制器处理);一直到window,如果window还是不能处理此事件则继续交给application(UIApplication单例对象)处理,如果最后application还是不能处理此事件则将其丢弃。

 转载请注明出处!