iOS:UIButton扩大按钮的响应区域
一、介绍
在开发中有时会遇见设计图里按钮设计的特别小,这时会用到手动扩大UIButton的响应范围
二、方式
下面有两个解决办法:
第一种方法:创建一个类目:UIButton+EnlargeTouchArea
.h
- #import <UIKit/UIKit.h>
- @interface UIButton (EnlargeTouchArea)
- - (void)setEnlargeEdgeWithTop:(CGFloat) top right:(CGFloat) right bottom:(CGFloat) bottom left:(CGFloat) left;
- - (void)setEnlargeEdge:(CGFloat) size;
- @end
.m
- #import "UIButton+EnlargeTouchArea.h"
- #import <objc/runtime.h>
- @implementation UIButton (EnlargeTouchArea)
- static char topNameKey;
- static char rightNameKey;
- static char bottomNameKey;
- static char leftNameKey;
- - (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;
- }
- }
- - (UIView*) hitTest:(CGPoint) point withEvent:(UIEvent*) event
- {
- CGRect rect = [self enlargedRect];
- if (CGRectEqualToRect(rect, self.bounds))
- {
- return [super hitTest:point withEvent:event];
- }
- return CGRectContainsPoint(rect, point) ? self : nil;
- }
- @end
使用方法:
- UIButton *button = [UIButton new];
- [button setEnlargeEdge:];
- //或者
- [button setEnlargeEdgeWithTop: right: bottom: left:];
第二种:直接创建一个UIButton类,然后复写pointInside方法
使用时继承于此类即可
.h
- #import <UIKit/UIKit.h>
- @interface BiggerClickAreaButton : UIButton
- @end
.m
- #import "BiggerClickAreaButton.h"
- @implementation BiggerClickAreaButton
- - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
- {
- CGRect bounds = self.bounds;
- //若原热区小于44x44,则放大热区,否则保持原大小不变
- CGFloat widthDelta = MAX(44.0 - bounds.size.width, );
- CGFloat heightDelta = MAX(44.0 - bounds.size.height, );
- bounds = CGRectInset(bounds, -0.5 * widthDelta, -0.5 * heightDelta);
- return CGRectContainsPoint(bounds, point);
- }
- @end
使用时直接继承创建即可
三、声明
本文转载自:https://www.cnblogs.com/rglmuselily/p/9543075.html
iOS:UIButton扩大按钮的响应区域的更多相关文章
- iOS之UIButton扩大按钮的响应区域
在开发中有时会遇见设计图里按钮设计的特别小,这时会用到手动扩大UIButton的响应范围,下面有两个解决办法: 第一种方法:创建一个类目:UIButton+EnlargeTouchArea .h文件 ...
- UGUI之不规则按钮的响应区域
比如一些不规则按钮最好可以设置它的响应区域.如下图所示,用Polygon Collider2D组件圈出精灵响应事件的区域. 注意 IsRaycastLocationValid 的判断区域是RectTr ...
- iOS UIButton单双击处理响应不同的方法
//显示目标 双击显示当前用户坐标位置 UIButton * btnShowDistination = [[UIButton alloc]initWithFrame:CGRectMake(, SCRE ...
- 扩大按钮 btn 响应区域
方法一:类别 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c91b13 } p.p2 { margin: 0 ...
- iOS 禁止多按钮同时响应
只需要对相应的按钮添加一行代码 [aButton setExclusiveTouch:YES];
- iOS - 扩展UIButton的响应区域
扩展UIButton的响应区域 引言 通常在iOS开发中通常会遇到产品说按钮的响应区域不大 而UI给我们的设计是按钮的面积 而不是按钮的响应面积 所以在这种情况下需要我们自己去扩展按钮的响应区域 思考 ...
- H5微信页面开发 IOS系统 input输入框失去焦点,软键盘关闭后,被撑起的页面无法回退到原来正常的位置,导致弹框里的按钮响应区域错位
H5微信页面开发,软键盘弹起后,若原输入框被遮挡,页面整体将会上移,然而当输入框失焦,软键盘收起后,页面未恢复,导致弹框里的按钮响应区域错位. 解决方案:给输入框(或select选择框)添加失去焦点的 ...
- iOS 9应用开发教程之ios9中实现按钮的响应
iOS 9应用开发教程之ios9中实现按钮的响应 IOS9实现按钮的响应 按钮主要是实现用户交互的,即实现响应.按钮实现响应的方式可以根据添加按钮的不同分为两种:一种是编辑界面添加按钮实现的响应:另一 ...
- iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)
iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...
随机推荐
- js判断手机邮箱格式(正则)
function fun() { var realname = document.getElementById("realname"); var telephone = docum ...
- Zepto的使用以及注意事项
为什么选择Zepto.js的原因: zepto.js的语法借鉴并且兼容jQuery,会使用jquery就会使用Zepto.js.Zepto.js是移动端的js库.Zepto.js相当于PC端的j ...
- Codeforces 986C AND Graph dfs
原文链接https://www.cnblogs.com/zhouzhendong/p/9161514.html 题目传送门 - Codeforces 986C 题意 给定 $n,m (0\leq n\ ...
- 存储过程导入excel
#region 导入订单 protected override string DoExcelData(System.Data.DataTable dt) { ...
- {}动态规划}记忆化dp
先搞个模板 #include<stdio.h> #include<string.h> using namespace std; typedef long long ll; ]; ...
- 052 kafka对topic的增删改查操作
一:create 1.开始使用命令 2.创建 bin/kafka-topics.sh --create --topic beifeng --zookeeper linux-hadoop01.ibeif ...
- day 74ajax
w3school地址ajax教程 ajax定义: AJAX(Asynchronous Javascript And XML) 翻译成中文就是'异步JavaScript和XML',也就是使用JavaSc ...
- radio按钮单选效果
必须有name,并且是同一值,判断效果可用value值确定
- rock-paper-scissors
rock-paper-scissors维护三个前缀和,然后注意顺序,最后做差来确定可行的答案,因为答案比较小,可以考虑这种暴力做法,像这种方案数可以++的题真的不多,如果想不出来特别优秀的想法,不妨简 ...
- 004.Ceph块设备基础使用
一 基础准备 参考<002.Ceph安装部署>文档部署一个基础集群: 新增节点主机名及IP在deploy节点添加解析: [root@deploy ~]# echo "172.24 ...