android 点击热区,增大UIButton的点击热区

这篇博客介绍了如何在iOS开发中扩大UIButton的点击区域。提供了两种方法:1. 直接设置按钮属性,调整点击检测范围。2. 使用类别(Category)扩展UIButton,增加自定义属性来实现点击区域的扩大。这两种方法都能有效改变按钮的实际响应区域,方便用户操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有两种方法可以处理这个问题:

1.视图中

UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];

button.frame = CGRectMake(100, 100, 20, 20);

button.backgroundColor = [UIColor yellowColor];

[button addTarget:self action:@selector(testButtonAction:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button];

button.minHitTestWidth = 180;// 点击区域宽高

button.minHitTestHeight = 180;

2.搭配类别使用

.h 文件

#import

@interface UIButton (HitAreaExpand)

@property (nonatomic) CGFloat minHitTestWidth;

@property (nonatomic) CGFloat minHitTestHeight;

@end

.m 文件

#import "UIButton+HitAreaExpand.h"

#import

@implementation UIButton (HitAreaExpand)

- (CGFloat)minHitTestWidth {

NSNumber * width = objc_getAssociatedObject(self, @selector(minHitTestWidth));

return [width floatValue];

}

- (void)setMinHitTestWidth:(CGFloat)minHitTestWidth {

objc_setAssociatedObject(self, @selector(minHitTestWidth), [NSNumber numberWithFloat:minHitTestWidth], OBJC_ASSOCIATION_ASSIGN);

}

- (CGFloat)minHitTestHeight {

NSNumber * height = objc_getAssociatedObject(self, @selector(minHitTestHeight));

return [height floatValue];

}

- (void)setMinHitTestHeight:(CGFloat)minHitTestHeight {

objc_setAssociatedObject(self, @selector(minHitTestHeight), [NSNumber numberWithFloat:minHitTestHeight], OBJC_ASSOCIATION_ASSIGN);

}

- (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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值