- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// 1.先判断自己能否处理事件
// 1.1不能 返回nil
if((self.userInteractionEnabled = NO) && (self.hidden = YES) && (self.alpha < 0.01)){
return nil;
}
// 1.2能,再接着判断触摸点是否在自己内部
// 2.再判断手指触摸点是否在自己内部
// 不在:返回nil
// 2.1 转换点的坐标
if (![self pointInside:point withEvent:event]) {
return nil;
}
// 3.如果以上两步成立,从后往前的遍历自己的子控件,看是否满足以上两个条件
NSInteger count = self.subviews.count;
for (NSInteger i = count - 1; i >=0; i--) {
CGPoint subP = [self convertPoint:point toView:self.subviews[i]];
UIView *fitView = [self.subviews[i] hitTest:subP withEvent:event];
if (fitView) {
return fitView;
}
}
// 4.如果子控件不满足的话,说明没有找到合适的View处理事件,那么就返回自己
return self;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"%s",__func__);
}
@end