重叠圆形按钮和命中/敲击测试

我正在尝试创建一个Tabla鼓应用程序(表是一对连接在一起的小手鼓)。 要做到这一点,我想通过将一个按钮放在另一个上面来为鼓的每个部分使用一个按钮。 像这样:

在此处输入图像描述

我尝试使用圆形图像作为按钮,但周围区域是一个矩形。 这意味着当用户点击绿色圆圈的某些部分时,它会播放橙色圆圈的声音(我希望这是有意义的)。

当用户点击绿色垫时,如何确保播放绿色垫的声音,当用户点击橙色垫时,播放橙色垫的声音?

没有“简单的方法”来限制抽头检测区域。 你是完全正确的:按钮的分接检测区域是它的矩形,这就是它所知道的。 因此,您无法使用按钮的简单点击检测来为您完成工作。 您将不得不自己检测水龙头,查看它的位置,并使用这些知识以及您对圆形图形的位置的知识来决定用户使用的鼓的哪个部分。

查看UITapGestureRecognizer,了解用户点击的位置和位置。

查看UIBezierPath,了解一种关于形状进行命中检测的方法(例如圆形,回答问题,“这个圆圈中的这一点”)。

你最好的选择可能是修改内置的命中测试,即UIButton或UIView子类,你在其中覆盖pointInside:withEvent:仅当点位于内部圆圈内时才返回YES,例如:

 -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { UIBezierPath* p = [UIBezierPath bezierPathWithOvalInRect:self.bounds]; return [p containsPoint:point]; } 

这很简单,就像它会得到的那样,我很害怕。