Как вы получаете несколько сенсорных кнопок для работы с touch-Began / Moved? - PullRequest
2 голосов
/ 18 февраля 2010

У меня есть несколько кнопок, которые я хочу активировать тремя разными способами.

  1. Touch Down
  2. Touch Down - множественное касание (одновременно)
  3. Touch Drag Inside (аналогично перетаскиванию пальца по пианино)

Первые два очевидно просты в IB. Однако у многих людей, в том числе и у меня, были проблемы с Touch Drag внутри. В итоге я использовал - (void) touchesMoved [см. Код]. Это прекрасно работает для перетаскивания ... но чтобы заставить его работать, мне пришлось отключить кнопки "Взаимодействие с пользователем" в IB. Это означает, что я потерял «Touch Down» и возможности мультитач.

Итак, чтобы заставить «Touch Down» работать, я использовал - (void) touchSegan [см. Код]. Это отлично работает, но я не могу заставить работать мультитач.

Кто-нибудь знает, как заставить мои кнопки срабатывать одновременно во время мультитач?
Или ... Есть ли способ переместить касания и функции кнопок в 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 Ответ

2 голосов
/ 18 февраля 2010

Вам нужно проверять каждое касание вместо одного случайного касания.Итак, for(UITouch *t in touches) вместо UITouch *touch = [touches anyObject]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...