我有一个视图,上面有一个以编程方式绘制的圆圈。我还有一个手势识别器,它代表检查它是否应该接收触摸(如果在这个圆圈上进行了点击,它应该接收)。
- (void)awakeFromNib
{
[super awakeFromNib];
circleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleHighlighted:)];
[self addGestureRecognizer:circleTapRecognizer];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
CGPoint hit = [touch locationInView:self];
if (gestureRecognizer == circleTapRecognizer) {
BOOL hitsCircle = hit.x >= CGRectGetMidX(self.bounds) - self.circleRadius &&
hit.x <= CGRectGetMidX(self.bounds) + self.circleRadius &&
hit.y >= CGRectGetMidY(self.bounds) - self.circleRadius &&
hit.y <= CGRectGetMidY(self.bounds) + self.circleRadius;
return hitsCircle;
}
return YES;
}
但是,如果在这个圆圈之外的空间上进行了点击,我希望超级视图能够接收到触摸。我怎样才能做到这一点?当然,我可以进行一个名为的委托方法调用tappedNotOnCircle
,它将调用 superview 的逻辑,但我想知道是否有更简单的方法。