圆形自定义按钮的较小活动区域

时间:2012-07-18 16:05:29

标签: iphone objective-c uibutton uievent

我有一个自定义按钮(使用带圆圈的形状图像作为其自定义视图)。问题是:自定义按钮的活动区域太大,如果我点击按钮外至少100个像素,它仍然会被注册为按下按钮。这会导致意外敲击。

注意: - 我不想减小按钮的大小,因为它已经超过了最低要求。我想减少可用空间。

如何减少这些按钮上的有效区域?

1 个答案:

答案 0 :(得分:2)

如果您的按钮不是UIButton的子类,则必须实现此目的。您可以覆盖pointInside:withEvent:以将“可触摸”区域更改为您想要的任意形状。简单地改变命中框的插图的子类可能如下所示:

// --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通常使用的边界框略大于边界。只使用这个子类而不设置任何插入将导致一个按钮只接受完全在按钮边界内的命中。