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

时间:2014-01-12 23:03:10

标签: ios coordinates uigesturerecognizer cgpoint

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

enter image description here

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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

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