不改变button大小,扩大点击范围
2017-05-16 15:29
375 查看
如图所示:
假设我们要做类似上图的一个效果,点击关闭图片的时候关闭窗口。但是为了整体UI效果,按钮做的小了一些,这时候会影响点击效果。(诚然,有的时候你觉得按钮做大一点不就行了吗,我也是这么想的,可是产品和UI会用一千个理由怼回来的)现在我贴出一个已经测试过的方法供大家使用。
我们将要实现的效果如图:
1.新建一个UIButton的Category – UIButton+EnlargeEdge
UIButton+EnlargeEdge.h
UIButton+EnlargeEdge.m
2.ViewController.m测试代码
代码就这么多,就不贴demo了,有需要的直接copy代码就好了
假设我们要做类似上图的一个效果,点击关闭图片的时候关闭窗口。但是为了整体UI效果,按钮做的小了一些,这时候会影响点击效果。(诚然,有的时候你觉得按钮做大一点不就行了吗,我也是这么想的,可是产品和UI会用一千个理由怼回来的)现在我贴出一个已经测试过的方法供大家使用。
我们将要实现的效果如图:
1.新建一个UIButton的Category – UIButton+EnlargeEdge
UIButton+EnlargeEdge.h
#import <UIKit/UIKit.h> #import <objc/runtime.h> @interface UIButton (EnlargeEdge) /** 设置可点击范围到按钮边缘的距离 */ - (void)setEnlargeEdge:(CGFloat)size; /** 设置可点击范围到按钮上、右、下、左的距离 */ - (void)setEnlargeEdgeWithTop:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom left:(CGFloat)left; @end
UIButton+EnlargeEdge.m
#import "UIButton+EnlargeEdge.h" static char topNameKey; static char rightNameKey; static char bottomNameKey; static char leftNameKey; @implementation UIButton (EnlargeEdge) - (void)setEnlargeEdge:(CGFloat)size { objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC); } - (void)setEnlargeEdgeWithTop:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom left:(CGFloat)left { objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:top], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:right], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:bottom], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:left], OBJC_ASSOCIATION_COPY_NONATOMIC); } - (CGRect)enlargedRect { NSNumber* topEdge = objc_getAssociatedObject(self, &topNameKey); NSNumber* rightEdge = objc_getAssociatedObject(self, &rightNameKey); NSNumber* bottomEdge = objc_getAssociatedObject(self, &bottomNameKey); NSNumber* leftEdge = objc_getAssociatedObject(self, &leftNameKey); if (topEdge && rightEdge && bottomEdge && leftEdge) { return CGRectMake(self.bounds.origin.x - leftEdge.floatValue, self.bounds.origin.y - topEdge.floatValue, self.bounds.size.width + leftEdge.floatValue + rightEdge.floatValue, self.bounds.size.height + topEdge.floatValue + bottomEdge.floatValue); } else { return self.bounds; } } - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { CGRect rect = [self enlargedRect]; if (CGRectEqualToRect(rect, self.bounds)) { return [super pointInside:point withEvent:event]; } return CGRectContainsPoint(rect, point) ? YES : NO; } @end
2.ViewController.m测试代码
#import "ViewController.h" #import "UIButton+EnlargeEdge.h" @interface ViewController () @property (nonatomic, strong) UIButton *button1; @property (nonatomic, strong) UIButton *button2; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.button1 = [UIButton buttonWithType:UIButtonTypeCustom]; self.button1.frame = CGRectMake(150, 100, self.view.bounds.size.width-300, self.view.bounds.size.width-300); self.button1.backgroundColor = [UIColor blueColor]; self.button1.tag = 1001; [self.button1 addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; [self.button1 setEnlargeEdge:10]; [self.view addSubview:self.button1]; self.button2 = [UIButton buttonWithType:UIButtonTypeCustom]; self.button2.frame = CGRectMake(150, 300, self.view.bounds.size.width-300, self.view.bounds.size.width-300); self.button2.backgroundColor = [UIColor greenColor]; self.button2.tag = 1002; [self.button2 addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; [self.button2 setEnlargeEdgeWithTop:50 right:50 bottom:200 left:50]; [self.view addSubview:self.button2]; } - (void)buttonClick:(UIButton *)btn { NSString *msg = nil; if (btn.tag == 1001) { msg = @"点击button1"; } else if (btn.tag == 1002) { msg = @"点击button2"; } UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:msg preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction *action = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:nil]; [alertController addAction:action]; [self presentViewController:alertController animated:YES completion:nil]; } @end
代码就这么多,就不贴demo了,有需要的直接copy代码就好了
相关文章推荐
- 扩大Button点击范围
- 扩大Button的点击范围,setImage与setBackgroundImage区别
- 如何随意改变和拓展button的点击范围
- button扩大可点击范围
- Android开发————Button点击改变颜色
- mx:button加skin光晕点击时,大小不一样
- ListView中的Button点击后相应的Item改变背景颜色
- 使用 TouchDelegate 扩大控件的点击范围
- 扩大Button按钮的点击区域
- mxl方法改变button的未选中、选中、点击时的图片
- android点击Button后,buttton的背景和颜色改变
- Android view扩大点击范围
- checkbox 扩大点击范围
- js 图片区域可点击,适配移动端,图片大小随意改变
- 微信小程序例子——实现button点击事件改变数据值
- #IOS#点击button按钮改变自身显示的文本无法实现
- MFC VS2010 改变button上的字体大小
- ImageButton点击按钮改变图片
- 1怎样让输入的text文本填写的部分只添加数字、2怎样将输入的数字一次性全部删除 3怎样选择密码 让它不显示 4 怎样实现在没有return的情况下点击button的情况下就能够使键盘页面下落5 怎样实现点击指定的button来对使指定的text进行键盘弹出 6怎样改变button按钮的状态
- android TextView改变部分字体的颜色,大小,设置部分字体有点击事件