一般来说,按钮的点击范围是跟按钮的大小一样的。若按钮很小时,想增大点击区域,网上通用的方法有
①设置btn图片setImage,然后将btn的size设置的比图片大
②在btn上添加一个比较大的透明btn
但以上有问题,若btn无图片就无法设置;添加透明btn则会改变view的层级。所以此时最好的方法是重写btn的
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
方法。例如:
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{ //当前btn大小
CGRect btnBounds = self.bounds; //扩大点击区域,想缩小就将-10设为正值
btnBounds = CGRectInset(btnBounds, -10, -10); //若点击的点在新的bounds里,就返回YES
return CGRectContainsPoint(btnBounds, point); }
对CGRectInset的解释
CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)作用是将rect坐标按照(dx,dy)进行平移,对size进行如下变换
新宽度 = 原宽度 - 2*dx;新高度 = 原高度 - 2*dy
即dx,dy为正,则为缩小点击范围;dx,dy为负的话,则为扩大范围
UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)]; [self.view addSubview:view1]; CGRect rect2 = CGRectInset(view1.frame, 10, 20); UIView *view2 = [[UIView alloc]initWithFrame:rect2]; [self.view addSubview:view2]; NSLog(@"%@",NSStringFromCGRect(rect2));
结果为
//{{110, 120}, {180, 160}}
比较这两个view的frame,即可印证该结论。