请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

实现button只有内切圆响应点击事件 为什么重写hittest

只实现point那个方法不行吗,hit test方法不是默认调用point方法的吗

正在回答 回答被采纳积分+3

3回答

提问者 慕UI9212626 2021-05-20 16:18:37

老师,您说是为了,不在内切圆的范围内,要能把事件传递出去?这句话是什么意思呢。意思是,如果只重写pointinside 而不重写hittest方法就传递不出去了吗。我看你重写的hittest方法和前面讲的hittest系统实现那个图里逻辑是一模一样的,没看出来重写hittest和系统的默认实现的区别,重写pointinside能明白,还是没明白为啥还要重写hittest。请老师解答下 谢谢

1 回复 有任何疑惑可以回复我~
卷王Charles 2021-10-10 17:54:58

如下场景中需要重写 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;
}

https://img1.sycdn.imooc.com//szimg/6162b67009fb754e07081644.jpg


0 回复 有任何疑惑可以回复我~
于海 2021-01-10 10:37:29

在实际应用场景下,不在内切圆的部分要能把事件透传出去

0 回复 有任何疑惑可以回复我~
  • 提问者 慕UI9212626 #1
    老师,您说是为了,不在内切圆的范围内,要能把事件传递出去?这句话是什么意思呢。意思是,如果只重写pointinside 而不重写hittest方法就传递不出去了吗。我看你重写的hittest方法和前面讲的hittest系统实现那个图里逻辑是一模一样的,没看出来重写hittest和系统的默认实现的区别,重写pointinside能明白,还是没明白为啥还要重写hittest。请老师解答下 谢谢
    回复 有任何疑惑可以回复我~ 2021-05-20 16:18:14
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信