如何让多个触摸按钮与touchesBegan / Moved一起使用?

时间:2010-02-18 04:30:38

标签: iphone interface-builder button multi-touch touchesmoved

我有一堆按钮,我想用三种不同的方式激活它们。

  1. 触摸
  2. 触摸 - 多点触控(同时)
  3. 触摸向内拖动(与在钢琴上拖动手指相同)
  4. 前两个在IB中显然很容易。然而,包括我自己在内的很多人都遇到了Touch Drag的问题。所以我最终使用了- (void) touchesMoved [见代码]。这对拖拽很有用......但为了使它工作,我必须禁用IB中的“用户交互”按钮。这意味着我失去了“Touch Down”和多点触控功能。

    所以,为了让“Touch Down”起作用,我使用了 - (void)touchesBegan [见代码]。这样可以正常工作,但我无法通过多点触控工作。

    有没有人知道如何在多点触控时同时触发我的按钮? 或者......有没有办法让触摸移动和IB中的按钮功能一起工作?

    我已经尝试了touch.view.multiTouchEnabled = Yes;并确保我的按钮在IB中可以多次触摸......但是没有。

    以下是我的代码。 非常感谢你的帮助。

    -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UITouch *touch = [[event touchesForView:self.view] anyObject];
    
        CGPoint location = [touch locationInView:touch.view];
    
        if(CGRectContainsPoint(p1.frame, location)) 
        {
            if (!p1.isHighlighted){
                [self pP01];
                [p1 setHighlighted:YES];
        }
    }else {
            [p1 setHighlighted:NO];
        }
        //
        if(CGRectContainsPoint(p2.frame, location)) 
        {
            if (!p2.isHighlighted){
                [self pP02];
                [p2 setHighlighted:YES];
            }
        }else {
            [p2 setHighlighted:NO];
        }
        if(CGRectContainsPoint(p3.frame, location))
        {
            if (!p3.isHighlighted){
                [self pP03];
                [p3 setHighlighted:YES];
            }
        }else {
            [p3 setHighlighted:NO];
        }
    }
    

    ///

    - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
        {
            UITouch *touch = [[event touchesForView:self.view] anyObject];
            CGPoint location = [touch locationInView:touch.view];
    
            if(CGRectContainsPoint(p1.frame, location))
            {
                [self pP01];
                [p1 setHighlighted:YES];
            }
            if(CGRectContainsPoint(p2.frame, location))
            {
                [self pP02];
                [p2 setHighlighted:YES];
            }
            if(CGRectContainsPoint(p3.frame, location))
            {
                [self pP03];
                [p3 setHighlighted:YES];
            }
    }
    

1 个答案:

答案 0 :(得分:2)

您需要检查每次触摸而不是一次随机触摸。因此,for(UITouch *t in touches)代替UITouch *touch = [touches anyObject]