iOS修改button的点击范围


一般来说,按钮的点击范围是跟按钮的大小一样的。若按钮很小时,想增大点击区域,网上通用的方法有
①设置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,即可印证该结论。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM