我有一个自定义按钮(它使用圆形图像作为其自定义视图)。问题是:自定义按钮的活动区域太大,如果我在按钮外点击至少 100 像素,它仍然会被注册为按钮上的点击。这会导致意外点击。
注意:- 我不想减小按钮的大小,因为它已经大于最低要求。我想减少可点击的空间。
如何减少这些按钮的活动区域?
我有一个自定义按钮(它使用圆形图像作为其自定义视图)。问题是:自定义按钮的活动区域太大,如果我在按钮外点击至少 100 像素,它仍然会被注册为按钮上的点击。这会导致意外点击。
注意:- 我不想减小按钮的大小,因为它已经大于最低要求。我想减少可点击的空间。
如何减少这些按钮的活动区域?
如果您的按钮还不是 UIButton 的子类,那么它必须是实现这一点。您可以覆盖pointInside:withEvent:
以将“可触摸”区域更改为您想要的任何任意形状。一个简单地改变 hit box 插入的子类可能看起来像这样:
// --HEADER--
@interface TouchInsetButton : UIButton
@property (nonatomic, assign) UIEdgeInsets touchInsets;
@end
// --IMPLEMENTATION--
@implementation TouchInsetButton
@synthesize touchInsets = _touchInsets;
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
CGRect modifiedHitBox = UIEdgeInsetsInsetRect([self bounds], _touchInsets);
return CGRectContainsPoint(modifiedHitBox, point);
}
@end
请注意,正如您所注意到的,UIButton 通常使用比其边界稍大的边界框。仅使用此子类而不设置任何插入将导致按钮仅接受完全在按钮范围内的点击。