0

我有一个视图,上面有一个以编程方式绘制的圆圈。我还有一个手势识别器,它代表检查它是否应该接收触摸(如果在这个圆圈上进行了点击,它应该接收)。

- (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 的逻辑,但我想知道是否有更简单的方法。

4

1 回答 1

1

有没有 GestureRecognizer 的解决方案。只需覆盖-(BOOL)[UIView pointInside:(CGPoint)point withEvent:(UIEvent *)event]

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    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;
}

为了更好地理解,请参阅 Apple 文档定义自定义视图

于 2013-03-04T14:51:41.153 回答