如何扩大button的点击区域

原创 2018年04月17日 15:59:09

1、.h


@interface UIButton (HitAreaExpand)


@property (nonatomic) CGFloat minHitTestWidth;

@property (nonatomic) CGFloat minHitTestHeight;



@end



2、.m

#import "UIButton+HitAreaExpand.h"

#import <objc/runtime.h>

static char minHitTestWidthKey;

static char minHitTestHeightKey;

@implementation UIButton (HitAreaExpand)


- (CGFloat)minHitTestWidth {

    return [objc_getAssociatedObject(self, &minHitTestWidthKey) floatValue];

}


- (void)setMinHitTestWidth:(CGFloat)minHitTestWidth {

    objc_setAssociatedObject(self, &minHitTestWidthKey, [NSString stringWithFormat:@"%f",minHitTestWidth], OBJC_ASSOCIATION_COPY);

}


- (CGFloat)minHitTestHeight {

    return [objc_getAssociatedObject(self, &minHitTestHeightKey) floatValue];

}


- (void)setMinHitTestHeight:(CGFloat)minHitTestHeight {

    objc_setAssociatedObject(self, &minHitTestHeightKey, [NSString stringWithFormat:@"%f",minHitTestHeight], OBJC_ASSOCIATION_COPY);

}


- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event {

    

    return CGRectContainsPoint(HitTestingBounds(self.bounds, self.minHitTestWidth, self.minHitTestHeight), point);

}


CGRect HitTestingBounds(CGRect bounds, CGFloat minimumHitTestWidth, CGFloat minimumHitTestHeight) {

    

    CGRect hitTestingBounds = bounds;

    if (minimumHitTestWidth > bounds.size.width) {

        hitTestingBounds.size.width = minimumHitTestWidth;

        hitTestingBounds.origin.x -= (hitTestingBounds.size.width - bounds.size.width)/2;

    }

    if (minimumHitTestHeight > bounds.size.height) {

        hitTestingBounds.size.height = minimumHitTestHeight;

        hitTestingBounds.origin.y -= (hitTestingBounds.size.height - bounds.size.height)/2;

    }

    return hitTestingBounds;

}


@end


3、使用时举例

  _newsBtn = [[UIButton alloc]init];

        [_newsBtn setBackgroundImage:[UIImage imageNamed:@"Notification_Icon"] forState:UIControlStateNormal];

        //增大按钮热区域

        _newsBtn.minHitTestWidth = 44;

        _newsBtn.minHitTestHeight = 44;

        [_newsBtn addTarget:self action:@selector(clickNewsBtn) forControlEvents:UIControlEventTouchUpInside];

        [self addSubview:_newsBtn];

        [_newsBtn mas_makeConstraints:^(MASConstraintMaker *make) {

            make.right.equalTo(self.mas_right).offset(-76);

            make.centerY.equalTo(_settingBtn.mas_centerY);

            make.width.height.mas_equalTo(23);

        }];


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/StreamLine_WenLiang/article/details/79976110

iOS开发小记:运用Runtime机制扩大UIButton的响应区域

通过OC创建类别的方式,运用Runtime特性,给UIButton增加了一个扩大其点击区域的方法...
  • lala2231
  • lala2231
  • 2016-02-04 14:28:57
  • 2411

扩大Button的点击区域

Android——扩大ImageButton的点击区域 遭遇问题:在布局文件xml中定义了一个ImageButton,因为图标尺寸很小导致很难有效点击。      具体代码如下所示...
  • luohai859
  • luohai859
  • 2014-01-22 13:19:52
  • 7232

iOS runtime扩大UIButton点击范围

我们知道C代码一般经过预处理、编译、链接、运行然后在平台上跑起来,Objective-C是基于C加入了面向对象和消息转发的动态语言,所以除了需要一个编译器外,还需runtime系统来动态创建类和对象。...
  • shenhuaikun
  • shenhuaikun
  • 2017-03-08 14:55:39
  • 1652

UIButton 扩大按钮的响应区域

第一种方法:创建一个类目:UIButton+EnlargeTouchArea ,用类方法进行调用 使用方法: 导入UIButton+EnlargeTouchArea.h UIButton *butto...
  • u013282507
  • u013282507
  • 2016-04-27 11:23:05
  • 3304

不改变button大小,扩大点击范围

如图所示: 假设我们要做类似上图的一个效果,点击关闭图片的时候关闭窗口。但是为了整体UI效果,按钮做的小了一些,这时候会影响点击效果。(诚然,有的时候你觉得按钮做大一点不就行了吗,我也是这么想的...
  • xiaozhuanddapang
  • xiaozhuanddapang
  • 2017-05-16 15:29:41
  • 768

Android如何扩大按钮点击区域

注:这里实现的扩大按钮点击区域是使按钮的实际可点击区域大于我们所见的区域。 方法一:通过ImageView ImageButton实现                         ...
  • c676063769
  • c676063769
  • 2015-08-11 13:25:58
  • 4171

[Swift] UIButton 增大UIButton点击区域

维护一个Swift项目,一UIButton按钮,图的大小是20x20,在被点击是很多时候感觉点击不了,想要增大点击区域,又不能改变图的大小(否则,美观就出问题了)。 1.UIButton 设置Fra...
  • Qyee16
  • Qyee16
  • 2016-06-18 20:56:33
  • 1394

关于扩大按钮响应区域的方法

当时我的项目里在tabview的表尾处有一个居中的按钮。测试经理希望点击按钮所在整行区域都能响应事件。 而项目经理却觉的此事没有必要,中间的加号按钮已经能告诉用户点击加号才会添加。 最终我与产品经...
  • my_programe_life
  • my_programe_life
  • 2015-10-29 15:02:11
  • 1225

Android 增大按钮的点击区域

由于手机屏幕很小,有时候图标做的很小,点起来,尤其是手大的人点击起来经常误操作,我们有个按钮就是这样,是一个关闭的按钮,经常误操作,今天终于想了个办法修复了。图片见下: 参考连接: http://...
  • song_shi_chao
  • song_shi_chao
  • 2014-03-28 16:25:55
  • 1835

button扩大可点击范围

一个扩大按钮点击范围的小技巧,在不改变frame的前提下,可通过以下方法实现: 关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。 在类的定义之外为类增加额外的存储空间 ...
  • u012243474
  • u012243474
  • 2017-02-24 14:19:55
  • 621
收藏助手
不良信息举报
您举报文章:如何扩大button的点击区域
举报原因:
原因补充:

(最多只允许输入30个字)