touch事件的传递:
在A视图上添加一个B视图,B视图上添加C视图,当我们touch C视图时,系统会从最底层的父视图开始检索,也就是先检索到A视图,然后遍历A视图的子视图,判断touch点在哪个子视图,发现在B视图,于是B视图也会遍历所有的子视图做同样的事情,事件传递到C视图,发现C视图没有子视图,于是由C视图处理touch事件
view的touch事件都会调用- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法,去判断由哪个view去响应事件,所以只需按下面修改
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
UIView * view = [super hitTest:point withEvent:event];
if (!view) {
for (UIView * subView in self.subviews) {
CGPoint p = [subView convertPoint:point fromView:self];//把point坐标转换到subView上
if (CGRectContainsPoint(subView.bounds, p)) {
view = subView;
}
}
}
return view;
}
此方法改变了事件检索的区域(包含了超出父视图范围的那一部分区域)
相关链接:www.cnblogs.com/WZLpq-home/p/5616309.html