让超出自己视图范围的子视图响应事件

有时需要让子视图的位置超出父视图,这时子视图不会响应点击事件,在父视图中实现这个方法,可以让子视图超出的部分也响应点击事件
父视图需要是view的子类
这个方法可以判断出自己的子视图,和子视图的子视图,在多层的话需要继续遍历
//让超出自己视图范围的子视图响应事件
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
   
    //没有剪裁子视图 没有隐藏 透明度大于0.0
    if(!self.clipsToBounds && !self.hidden && self.alpha > 0.0){
       
        //遍历子视图
        for (UIView *member in self.subviews){
          
            //将相对于自己的点坐标转化为相对于子视图的点坐标
            CGPoint subPoint = [member convertPoint:point fromView:self];
            //返回响应的view
            UIView *result = [member hitTest:subPoint withEvent:event];
           
            if(result != nil){
                return result;
            }else{
                //遍历下一级子视图
                if(!member.clipsToBounds && !member.hidden && member.alpha > 0.0){
                    for (UIView *member1 in member.subviews){
                       
                        CGPoint subPoint1 = [member1 convertPoint:subPoint fromView:member];
                        UIView *result1 = [member hitTest:subPoint1 withEvent:event];
                        if(result1 != nil){
                            return result1;
                        }
                    }
                }
            }
        }
    }
   
    return nil;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值