UIButton实现区域外点击

UIButton实现区域外点击

今天项目开发中偶然需要这个功能,一个按钮区域大小外也要能够点击响应

因为项目是很早就开发的就项目,所以没有必要因为这个小的需求来修改按钮的大小,重新制定约束,或者frame等等,因为可能会影响到其他控件的约束或者响应等,
那么如何能够实现这个功能呢?

其实最简单的方法就是创建一个那么大的按钮,然后按钮的图片设置小一点的,让人看上去按钮就那么大,但是其实要比我们看到的要大.
这样的实现相信每一个人都会,至于我为什么没有用,上面也提到了

于是第一时间想到了touchBegin,我们可以获取点击的坐标

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    CGPoint location = [[touches allObjects][0] locationInView:self.view];
    //...
}

然后根据坐标判断是否响应某一个方法,来达到目的
这样确实能够实现,但是如果一个界面有很多按钮都需要这样判断,那么是不是就很麻烦了呢?
有没有什么比较好的解决方案呢?
一个按钮的点击范围,那么最好的方案肯定是在这个按钮内做判断.
选择自定义一个按钮?
外层是按钮,中间是一个小的图片?那么和开始提到的一样了

所以我应该试着在touch,或者简单的在point上面做点文章
UIButton很简单,从头阅读到尾,也没有看到可用的信息.
那么进入其父类UIControl,很显然,也很失望,这个类里面都是响应的属性或者方法,能够判断点击的执行或者取消等等,但是诸如范围大小的字眼,很难看到,
于是继续深入,找到UIView
终于,没有过几行,我就发现了一个好东西

- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;   // default returns YES if point is in bounds

这个是什么方法呢?
这个函数的用处是判断当前的点击或者触摸事件的点是否在当前的view中。默认是当点在视图大小的范围内返回yes,之外则返回no

这正是我们想要的不是么?
我们可以重写这个方法.在范围外的某一片区域内,我们都返回YES,
那么其判定就是当前的点击或者触摸时间的点就在当前的view中

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值