实现button只有内切圆响应点击事件 为什么重写hittest
来源:3-3 UI事件传递&响应 相关面试问题

慕UI9212626
2020-12-27
只实现point那个方法不行吗,hit test方法不是默认调用point方法的吗
写回答
3回答
-
慕UI9212626
提问者
2021-05-20
老师,您说是为了,不在内切圆的范围内,要能把事件传递出去?这句话是什么意思呢。意思是,如果只重写pointinside 而不重写hittest方法就传递不出去了吗。我看你重写的hittest方法和前面讲的hittest系统实现那个图里逻辑是一模一样的,没看出来重写hittest和系统的默认实现的区别,重写pointinside能明白,还是没明白为啥还要重写hittest。请老师解答下 谢谢
10 -
卷王Charles
2021-10-10
如下场景中需要重写 hitTest。
我搜索了下我们App的代码(开发了有好几年的App了),实际没有重写过hitTest,大多数场景重写pointInSide:withEvent即可
点击下图中红色箭头所指的区域,如果让视图2(黄色区域)来响应,需要重写视图1的hitTest方法来返回视图2。代码如下:
//View1中 hitTest - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { __block UIView *view = nil; [self.subviews enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj isKindOfClass:[View2 class]] && [obj pointInside:point withEvent:event]) { view = obj; } }]; return view; }
00 -
于海
2021-01-10
在实际应用场景下,不在内切圆的部分要能把事件透传出去
012021-05-20
相似问题