在需要扩大和缩小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;
}