如何将圆形UIButton的UIControlEventTouchUpInside仅限制在圆圈内?

时间:2013-09-28 03:13:12

标签: ios objective-c uibutton

我已经检查了创建圆形按钮的其他问题,这很有效 -

button.layer.cornerRadius = button.frame.size.height / 2;

但是,我发现该按钮响应整个原始帧的UIControlEventTouchUpInside。如何让它只响应循环层内的UIControlEventTouchUpInside事件?

谢谢, 斯里达尔

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码实现UIButton的子类: (不完全准确,因为我们期望按钮宽度==按钮高度)

@implementation RoundedButton

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
{
    CGFloat radius = self.bounds.size.height / 2;
    //
    CGFloat x = radius - point.x;
    CGFloat y = radius - point.y;
    //
    if (x*x + y*y < radius*radius)
        return [super pointInside:point withEvent:event];
    else
        return NO;
}

@end

答案 1 :(得分:0)

你最好的选择是实施 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event,因为您需要在每次触摸时检查命中框。只需检查距离(center,touchPosition)是否小于buttonRadius。