// // YMRoomAnimationBaseView.m // YUMI // // Created by YUMI on 2021/11/22. // #import "XPRoomAnimationHitView.h" // MARK: 只要有子视图命中,就交给子视图处理;子视图都没命中就放弃处理,自己不接收任何触摸事件。 @implementation XPRoomAnimationHitView //- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // for (NSInteger i = (self.subviews.count - 1) ; i >= 0 ; i--) { // UIView * subView = [self.subviews xpSafeObjectAtIndex:i]; // CGPoint convertPoint = [subView convertPoint:point fromView:self]; // if (CGRectContainsPoint(subView.bounds, convertPoint)) { // return [subView hitTest:convertPoint withEvent:event]; // } // } // return nil; //} - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // 应该先判断自身是否可以接收事件 if (!self.userInteractionEnabled || self.hidden || self.alpha <= 0.01) { return nil; } // 从后往前遍历子视图 for (NSInteger i = self.subviews.count - 1; i >= 0; i--) { UIView *subView = [self.subviews xpSafeObjectAtIndex:i]; if (!subView) continue; CGPoint convertPoint = [subView convertPoint:point fromView:self]; UIView *hitTestView = [subView hitTest:convertPoint withEvent:event]; if (hitTestView) { return hitTestView; } } // 如果子视图都不响应,则返回nil,让触摸事件传递给下层视图 // 这是关键:不拦截触摸事件,让它们正常传递 return nil; } @end