采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
只实现point那个方法不行吗,hit test方法不是默认调用point方法的吗
老师,您说是为了,不在内切圆的范围内,要能把事件传递出去?这句话是什么意思呢。意思是,如果只重写pointinside 而不重写hittest方法就传递不出去了吗。我看你重写的hittest方法和前面讲的hittest系统实现那个图里逻辑是一模一样的,没看出来重写hittest和系统的默认实现的区别,重写pointinside能明白,还是没明白为啥还要重写hittest。请老师解答下 谢谢
如下场景中需要重写 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; }
在实际应用场景下,不在内切圆的部分要能把事件透传出去
登录后可查看更多问答,登录/注册
从BAT/TMD名企真题入手,结合源码及应用,构建完整iOS知识体系
1.3k 11
1.9k 9
1.2k 9
1.0k 8
997 8