UI基础_hitTest扩大响应范围

来源:互联网 发布:公司域名备案流程 编辑:程序博客网 时间:2024/06/07 00:25

在需要扩大和缩小UIButton/UISlider的响应范围时,重写 hitTest方法

hitTest:withEvent:方法的使用:

1.首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内;2.若返回NO,则hitTest:withEvent:返回nil;3.若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从top到bottom,即从subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕;4.若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束;5.如所有子视图都返回非,则hitTest:withEvent:方法返回自身(self)。
  • 注:hitTest:withEvent:方法忽略隐藏(hidden=YES)的视图,禁止用户操作(userInteractionEnabled=YES)的视图,以及alpha级别小于0.01(alpha<0.01)的视图。
//扩大slider的响应范围- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {    if (CGRectContainsPoint(CGRectInset(self.bounds, -20, -20), point) &&!CGRectContainsPoint(self.textView.frame, point)){        return self.slider;    }    return [super hitTest:point withEvent:event];}

判断触摸点是否在某个范围上

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {    return YES;}
0 0