我已经检查了创建圆形按钮的其他问题,效果很好 -
button.layer.cornerRadius = button.frame.size.height/2;
但是,我发现该按钮响应 UIControlEventTouchUpInside 整个原始帧。如何让它仅在圆形层内响应 UIControlEventTouchUpInside 事件?
谢谢, 斯里达尔
我已经检查了创建圆形按钮的其他问题,效果很好 -
button.layer.cornerRadius = button.frame.size.height/2;
但是,我发现该按钮响应 UIControlEventTouchUpInside 整个原始帧。如何让它仅在圆形层内响应 UIControlEventTouchUpInside 事件?
谢谢, 斯里达尔
您可以使用以下代码实现 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
您最好的选择是实施
,
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
因为
您需要在每次触摸时检查命中框。简单地说,检查距离(中心,触摸位置)是否小于按钮半径。- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event