我已经检查了创建圆形按钮的其他问题,这很有效 -
button.layer.cornerRadius = button.frame.size.height / 2;
但是,我发现该按钮响应整个原始帧的UIControlEventTouchUpInside。如何让它只响应循环层内的UIControlEventTouchUpInside事件?
谢谢, 斯里达尔
答案 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。