50 lines
1.6 KiB
Objective-C
50 lines
1.6 KiB
Objective-C
//
|
||
// 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
|