增加UIButton的点击范围,获取验证码的倒计时

2020-03-17 05:32 来源:未知

背景

在我们日常生活中,UIButton被用到各种各样的场景之中。为了展示出其小巧和美观往往都把它做的很小也就是给的size很小。这样虽然满足了美观度,但是造成了点击体验效果不好的问题。(哈哈,因为一般汉子手指太粗点不到按钮的问题)。

图片 1奋斗的郅博

UI给的图有时候很小,或者有个需求需要我们扩大button的点击区域, 我们一般的操作是在button 上添加一个view 增加点击事件,但是我们还有其他更方便的方法去扩大button 的点击区域。有需要可以了解下事件的分发机制。
有两种方式扩大button 的点击区域:

级别:★★☆☆☆标签:「UIButton Runtime」「UIButton点击频率」「UIButton防止多次点击」作者: Xs·H审校: QiShare团队

点击获取验证码时,按钮通常会有60秒延迟禁止点击,防止发送速度过快,增加服务器压力和消耗.

解决方法

1.给UIButton增加一个扩展类(UIButton(Extension)),在里面添加如下方法

@implementation UIButton (Extension)@dynamic hitTestEdgeInsets;static const NSString *KEY_HIT_TEST_EDGE_INSETS = @"HitTestEdgeInsets";-setHitTestEdgeInsets:(UIEdgeInsets)hitTestEdgeInsets { NSValue *value = [NSValue value:&hitTestEdgeInsets withObjCType:@encode(UIEdgeInsets)]; objc_setAssociatedObject(self, &KEY_HIT_TEST_EDGE_INSETS, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(UIEdgeInsets)hitTestEdgeInsets { NSValue *value = objc_getAssociatedObject(self, &KEY_HIT_TEST_EDGE_INSETS); if { UIEdgeInsets edgeInsets; [value getValue:&edgeInsets]; return edgeInsets; }else { return UIEdgeInsetsZero; }}- pointInside:point withEvent:(UIEvent *)event { if(UIEdgeInsetsEqualToEdgeInsets(self.hitTestEdgeInsets, UIEdgeInsetsZero) || !self.enabled || self.hidden) { return [super pointInside:point withEvent:event]; } CGRect relativeFrame = self.bounds; CGRect hitFrame = UIEdgeInsetsInsetRect(relativeFrame, self.hitTestEdgeInsets); return CGRectContainsPoint(hitFrame, point);}@end

2.调用的时候也异常简单,UIButton对象调hitTestEdgeInsets方法即可

 UIButton *button = [[UIButton alloc] initWithFrame:CGRectZero];//上下左右的各个方向的Insets量[button setHitTestEdgeInsets:UIEdgeInsetsMake(-10, -10, -10, -10)];[self.view addsubview:button];

注:这样我们点击UIButton周围的上下左右各10的位置仍然能触发UIButton点击时间。这样就做好了增加UIButton的点击范围。

第一种:重写方法 -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event

有几个实际业务场景需要控制UIButton响应事件的时间间隔。比如:1、当通过点击按钮来执行网络请求时,若请求耗时稍长,用户往往会再点一次。这样,就执行了两次请求,造成了资源浪费。2、在移动终端性能较差时(比如iPhone 6升级到iOS 11

TAG标签:
版权声明:本文由美高梅网投平台发布于新闻中心,转载请注明出处:增加UIButton的点击范围,获取验证码的倒计时