Ios5 通过UIgestureRecognitor同时处理两个不同点上的点击

Ios5 通过UIgestureRecognitor同时处理两个不同点上的点击,ios5,uigesturerecognizer,multi-touch,Ios5,Uigesturerecognizer,Multi Touch,我有两个标签在两个不同的位置,当两个标签同时点击时,我希望另一个标签显示成功消息 我如何做到这一点?我可以通过一个或多个手指触摸来识别单次轻触或双次轻触,但这是另一种情况。请帮忙。我试过这个,但不起作用 UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; tapRecognizer.nu

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

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

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

提前感谢。

您试图检测的并不是一个手势

我建议在每个按钮上添加一个轻触手势识别器。处理程序将:

  • 存储点击的时间(在调用处理程序时)
  • 将此时间与另一个按钮上次按下的时间进行比较 轻敲。如果时间非常相似(可能相隔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
        }
    }
    
    -(无效)把手按钮1TAP:(UITAPPgestureRecognitor*)发送器{
    if(sender.state==UIGestureRecognitizerStateEnded)
    {
    self.button1TapTime=CACurrentMediaTime();
    [同步抽头自检];
    }
    }
    -(无效)把手按钮2TAP:(UITAPPgestureRecognitor*)发送器{
    if(sender.state==UIGestureRecognitizerStateEnded)
    {
    self.button2TapTime=CACurrentMediaTime();
    [同步抽头自检];
    }
    }
    -(无效)同时抽头的测试
    {
    
    如果(fabs(self.button1TapTime-self.button2TapTime)正式的话,我首先接受了termes的答案,这也行得通,但我找到了一个更简单的解决方案。不需要两个手势识别器,只需一个简单的轻触手势识别器,触摸次数为2即可实现。下面是代码:

    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        tapRecognizer.numberOfTapsRequired = 1;
        tapRecognizer.numberOfTouchesRequired = 2;
        tapRecognizer.delegate = self;
        [self addGestureRecognizer:tapRecognizer];
    
    -(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));
    }
    
    现在,在handle-tap方法中,我们可以通过UIGestureRecognitor类的实例方法“”轻松获得两个接触点。因此,在
    handleTap:
    方法中,我们需要检查两个接触点是否位于所需位置。下面是代码:

    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        tapRecognizer.numberOfTapsRequired = 1;
        tapRecognizer.numberOfTouchesRequired = 2;
        tapRecognizer.delegate = self;
        [self addGestureRecognizer:tapRecognizer];
    
    -(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));
    }
    

    谢谢tim的回答,请您在代码片段方面多帮我一点忙好吗?这将非常有帮助:)您认为如果我使用自定义手势识别器会不会更简单?请给出您的反馈。添加了一个代码片段(尽管我真的认为您可以自己处理!)。自定义手势很复杂,在这种情况下完全不合适,因为您在两个不同的视图上检测到了点击手势-您会将该手势附加到哪一个视图?非常感谢tim,您的解决方案确实有效,您完全正确无需自定义手势:)再次感谢:)