有的时候,UI小图标,可是需要可以点击.如果使用button的setImage来设置资源文件,点击范围有可能就变得很小,经常响应不了,体验感很差.这时候就可以使用本文的方法来适当的扩大按钮的点击范围,却不改变实际按钮展示范围来实现这个需求了!
第一种方法:
首先,重写一个继承至UIButton的UIButton类;
其次,重写UIButton的- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event方法,该方法主要用来判断点在不在当前view上(方法调用者的坐标系上)如果返回YES,代表点在方法调用者的坐标系上;返回NO代表点不在方法调用者的坐标系上,那么方法调用者也就不能处理事件。
最后,只需要创建这个UIButton类来使用即可.
这个方法主要使用就是一个一个UIButton的创建使用,不可批量使用
第二种方法(使用runtime,可批量设置使用-推荐使用)
首先,创建UIButton分类(category);
其次,添加点击需要扩大多大范围的值属性;
然后,和第一种方法一样重写UIButton的- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event方法;
最后,在需要使用的地方引用该头文件,设置对应的范围值即可.
本文只介绍了重写- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event方法来实现.还可以通过重写方法 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event来实现,具体也是差不多,通过改变点击的point大小,然后判断是否在点击区域内来实现返回view.
补充:
CG_EXTERN CGRect CGRectInset(CGRect rect,CGFloat dx,CGFloat dy)
该函数表示:通过后面的 dx和dy 重置第一个参数rect作为结果返回。
重置方式: 1->>先把rect的坐标按dx,dy进行平移
2->> 然后把rect大小(size)宽度缩小2倍的dx 高度缩小2倍的dy
3->>如果dx dy是负的 就是放大
4->> 就是在CGRectOffset的基础上 调整 size