gpt4 book ai didi

ios - 如果内部识别器未收到触摸,则传递外部识别器

转载 作者:行者123 更新时间:2023-11-29 04:06:07 24 4
gpt4 key购买 nike

我有一个 View ,上面有一个以编程方式绘制的圆圈。另外,我有一个手势识别器,委托(delegate)人检查它是否应该接收触摸(如果在这个圆圈上点击,则应该接收触摸)。

- (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;
}

但是,如果在该圆之外的空间上进行了点击,我希望 super View 能够接收到触摸。我怎样才能做到这一点?当然,我可以进行名为 tappedNotOnCircle 的委托(delegate)方法调用,它将调用 super View 的逻辑,但我想知道是否有更简单的方法。

最佳答案

有一个不使用 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 文档 Defining a Custom View

关于ios - 如果内部识别器未收到触摸,则传递外部识别器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15204000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com