当发生用户交互的时候,uiview会自动调用hitTest,重写系统的hitTest方法,实现效果与系统一样,则猜想正确!
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
NSLog(@"%@----hitTest:", [self class]);
// 如果控件不允许与用户交互那么返回 nil
if (self.userInteractionEnabled == NO || self.alpha <= 0.01 || self.hidden == YES) {
return nil;
}
// 如果这个点不在当前控件中那么返回 nil
if (![self pointInside:point withEvent:event]) {
return nil;
}
// 从后向前遍历每一个子控件
for (int i = (int)self.subviews.count - 1; i >= 0; i--) {
// 获取一个子控件
UIView *lastVw = self.subviews[i];
// 把当前触摸点坐标转换为相对于子控件的触摸点坐标
CGPoint subPoint = [self convertPoint:point toView:lastVw];
// 判断是否在子控件中找到了更合适的子控件
UIView *nextVw = [lastVw hitTest:subPoint withEvent:event];
// 如果找到了返回
if (nextVw) {
return nextVw;
}
}