iOS响应链原理

Posted 小楼一夜听春雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS响应链原理相关的知识,希望对你有一定的参考价值。

ios找到被点击的view的过程是从根view开始递归地调用hitTest方法,直到有一个子view的hitTest方法返回自身;如果所有一级子view的hitTest方法都返回nil,那么根view就返回自己

 

应用hitTest方法,hitTest方法的作用是返回被点击的view,只返回一个。

 

每个view都会有hitTest方法,hitTest方法里面会去调用pointInside方法来判断点击的点是否在自己的view范围内,hitTest返回自身view的条件是自身的hitTest方法被调用,自己的pointInside方法返回true,没有子view或者所有子view的hitTest方法返回nil。(另一种理解方法是点击的点在父view的范围内,父view才有可能会去调用子viewhitTest方法,这里说有可能的原因是 如果父viewuserInteractionEnabled  == NO 时,父view的hitTest方法会直接返回nil, 子viewhitTest方法也不会被调用)

 

hitTest方法大致的内容 

-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event {

//一些判断条件,比如userInteractionEnabled == NO 时直接返回nil

 

 if([self pointInside:point withEvent:event]) {

 for(UIView *subView in self.subViews) {

      UIView *hitView = [subView hitTest:point withEvent:event];

      if(hitView) {

            return hitView;

      }

 }

 return self;

}

 

 return nil;

}

以上是关于iOS响应链原理的主要内容,如果未能解决你的问题,请参考以下文章

iOS 响应链

iOS事件响应链

iOS 事件响应者链的学习(也有叫 UI连锁链)

ios中事件的响应链(Responder chain)和传递链

iOS开发 - 事件传递响应链

链图云没有获取到响应参数是怎么回事?