1

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

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

但是,我发现该按钮响应 UIControlEventTouchUpInside 整个原始帧。如何让它仅在圆形层内响应 UIControlEventTouchUpInside 事件?

谢谢, 斯里达尔

4

2 回答 2

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
于 2013-09-28T04:40:35.550 回答
0

您最好的选择是实施 , -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event因为 您需要在每次触摸时检查命中框。简单地说,检查距离(中心,触摸位置)是否小于按钮半径。- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

于 2013-09-28T04:29:08.553 回答