参考文章:iOS hitTest
自定义封装了UIView,发现内部的
- UIButton不响应 addTarget:action:forControlEvents:事件;
- UIImageView开了userInteractionEnabled,加了UITapGestureRecognizer也不响应。
知道是事件传递响应问题,找到了参考文章,根据文章内容重写了
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
在封装的View中实现
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
//需要点击的View(UIImageView-开触摸, UIButton等)
NSArray *tapViews = @[ view1, view2 ];
for (UIView *tapView in tapViews) {
//将当前View的触摸点转换坐标系,转换到tapView的身上,生成一个新的点
CGPoint newPoint = [self convertPoint:point toView:tapView];
//判断如果这个新的点是在tapView身上,那么处理点击事件最合适的view就是tapView
if ([tapView pointInside:newPoint withEvent:event]) {
return tapView;
}
}
return [super hitTest:point withEvent:event];
}
网友评论