1

我在两个不同的位置有两个标签,当同时点击两个标签时,我希望另一个标签显示成功消息。

见图片:

我该如何做到这一点?我可以通过一个或多个手指触摸识别单击或双击,但这是一种不同的情况。请帮忙。我试过这个,但它不起作用。

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        tapRecognizer.numberOfTapsRequired = 1;
        tapRecognizer.numberOfTouchesRequired = 2;
        tapRecognizer.delegate = self;
        [self.view addGestureRecognizer:tapRecognizer];

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if (touch.view == tap2 && touch.view == tap1)
    {
        result.text = @"success";
    }
    return YES;
}

提前致谢。

4

2 回答 2

2

你试图检测的并不是一个单一的手势。

我建议为每个按钮添加一个点击手势识别器。处理程序将:

  1. 存储点击的时间(在调用处理程序的那一刻)
  2. 将此时间与上次点击另一个按钮的时间进行比较。如果时间非常相似(可能相隔 0.25 秒),请考虑它们都被同时点击并做出相应反应。

在真实设备上玩时间间隔以找到理想的数量。

更新:

一段显然没有经过任何测试的代码片段:

- (void)handleButton1Tap:(UITapGestureRecognizer *)sender  {
    if (sender.state == UIGestureRecognizerStateEnded)
    {
        self.button1TapTime = CACurrentMediaTime();
        [self testForSimultaneousTap];
    }
}

- (void)handleButton2Tap:(UITapGestureRecognizer *)sender  {
    if (sender.state == UIGestureRecognizerStateEnded)
    {
        self.button2TapTime = CACurrentMediaTime();
        [self testForSimultaneousTap];
    }
}

- (void)testForSimultaneousTap
{
    if (fabs(self.button1TapTime - self.button2TapTime) <= 0.2)
    {
        // Do stuff
    }
}

其中 self.button1TapTime 和 self.button2TapTime 是成员变量(双精度)。

蒂姆

于 2012-10-03T12:31:22.543 回答
0

正式地,我首先接受了 termes 的回答,这也有效,但我找到了一个更简单的解决方案来解决这个过程。不需要两个手势识别器,只需一个简单的点击手势识别器即可实现,触摸次数为两次。这是代码:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    tapRecognizer.numberOfTapsRequired = 1;
    tapRecognizer.numberOfTouchesRequired = 2;
    tapRecognizer.delegate = self;
    [self addGestureRecognizer:tapRecognizer];

现在,在handle tap 方法中,我们可以通过UIGestureRecognizer 类的实例方法“ locationOfTouch:inView: ”轻松获取两个触摸点。所以在handleTap:方法中我们需要检查两个接触点是否在想要的位置。这是代码:

-(void)handleTap:(UITapGestureRecognizer*)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateEnded)
    {
        CGPoint point1 = [recognizer locationOfTouch:0 self];
        CGPoint point2 = [recognizer locationOfTouch:1 self];

        if ([self validateTapIn:point1 and:point2])
        {
            resultLabel.text = @"success";
        }
    }
}

-(BOOL)validateTapIn:(CGPoint)point1 and:(CGPoint)point2
{
    return
    (CGRectContainsPoint(label1.frame, point1) && CGRectContainsPoint(label2.frame,:point2)) ||
    (CGRectContainsPoint(label1.frame, point2) && CGRectContainsPoint(label2.frame, point1));
}
于 2012-10-12T06:39:57.590 回答