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才有可能会去调用子view的hitTest方法,这里说有可能的原因是 如果父view的userInteractionEnabled == NO 时,父view的hitTest方法会直接返回nil, 子view的hitTest方法也不会被调用)
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响应链原理的主要内容,如果未能解决你的问题,请参考以下文章