扩大UIButton的点击范围

有的时候,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

你可能感兴趣的:(扩大UIButton的点击范围)