iOS中,要改变响应区域,首相想到的是响应者链条,然后就想到
- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;
这个方法,在这里判断按钮是否可以响应。所以要重写该方法。
简单的办法是在这里,给个响应的固定数值,比如上下左右全是20,生成一个新的rect,在判断这个point是否在这个rect内。
返回 CGRectContainsPoint(rect, point) ? self : nil; 也可以解决问题,可是有时候这个数值不是很固定,所以最好还是把这个数值设置成一个可变的数值。
1. 首先通过关联对象的办法来实现记录按钮的响应区域变化
2. 通过设置的新边距,来重新计算新的响应区域
3. 重写响应者方法。
到这里,响应区域已经解决了。
下面开始设置重复点击的问题,简单的想法是在点击按钮方法的时候,把这个按钮设置成不可用,或者是设置一个布尔值,来控制方法的执行。
把这个方法写在分类里,可以做到一劳永逸的效果。
首先是准备工作
然后是设置一个新的添加事件的方法
在响应方法中设置一个属性来决定是否跳过执行方法
到此防重复点击的处理也做好了。