现在有一个问题,点击黄色子视图超出红色视图的区域的时候,事件没有响应。原因是事件传递默认是在红色父视图的坐标区域里面的,所以超出的部分不起作用。
解决问题的思路:重写红色父视图的- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法,当超出区域的适合返回黄色子视图。
@interface UIView2:UIView@end@implementation UIView2@end@interface UIView1:UIView@end@implementation UIView1- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ if (![self pointInside:point withEvent:event]) { for (UIView *view in self.subviews) { CGPoint view2Point = [self convertPoint:point toView:view]; if ([view isKindOfClass:[UIView2 class]]&&CGRectContainsPoint(view.frame, view2Point)) { return view; } } } return [super hitTest:point withEvent:event];}@end// UIView1 *view1 = [UIView1 new]; view1.frame = CGRectMake(50, 100, 100, 100); view1.backgroundColor = [UIColor redColor]; [self.view addSubview:view1]; UIView2 *view2 = [UIView2 new]; view2.frame = CGRectMake(10, 50, 100, 100); view2.backgroundColor = [UIColor yellowColor]; [view1 addSubview:view2]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap)]; [view2 addGestureRecognizer:tap];- (void)tap{ NSLog(@"点击了黄色的view");}复制代码