- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
//1.判断自己能否接收事件
if (self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) {
//不能接收事件
return nil;
}
//2.点在不在自己身上
if (![self pointInside:point withEvent:event]) {
return nil;
}
//3.从后往前遍历自己的子控件,把事件传递给子控件,调用子控件的hitTest,
int count = (int)self.subviews.count;
for (int i = count - 1; i >= 0; i--) {
//获取子控件
UIView *childView = self.subviews[i];
//把当前点的坐标系转换成子控件的坐标系
CGPoint childP = [self convertPoint:point toView:childView];
UIView *fitView = [childView hitTest:childP withEvent:event];
if (fitView) {
return fitView;
}
}
//4.如果子控件没有找到最适合的View,那么自己就是最适合的View.
return self;
}
/** 上面自定义的写法就相当于下面的直接写了 return [super hitTest:point withEvent:event];*/
//什么时候调用:当事件传递给当前View时, 会调用当前Veiw的hitTest方法.
//作用:寻找最适合的View.
//返回值:返回谁,谁就是最适合的view,谁就响应事件,就会调用谁的touches方法
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
//1.判断自己能否接收事件
//2.点在不在自己身上
//3.从后往前遍历自己了的子控件,把事件传递给子控件,调用子控件的hitTest,
//4.如果子控件没有找到最适合的View,那么自己就是最适合的View.
return [super hitTest:point withEvent:event];
}
iOS日常基础记录10
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...