具体效果图:
-
未点击时的效果图:
-
点击橘黄色view上非按钮点击部分的效果图:
-
点击橘黄色view上非按钮点击部分时, 控制台打印效果图:
-
点击橘黄色上按钮的部分时, 点击事件穿透到按钮上, 效果图如下:
具体代码实现如下:
- LTView就是自定义的橘黄色view控件
- 此处btn是通过先创建代码, 反向拉线的方式连接
// view触摸事件
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"%s", __func__);
}
/**
返回响应事件的控件
@param point 触摸点 在当前方法调用者自身坐标系上的位置
@param event 触摸事件
@return 响应点击事件的控件, nil: 自身及自身子控件都不是响应者, self: 自身是响应者
*/
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
//转移坐标系, 将point的坐标从橘黄色view上转移到按钮上
CGPoint btnPoint = [self convertPoint:point toView:self.btn];
//判断点是否在按钮上
if ([self.btn pointInside:btnPoint withEvent:event]) {
return self.btn;
}else {
return [super hitTest:point withEvent:event];
}
}