Как заставить несколько сенсорных кнопок работать с touchesBegan / Moved?

StackOverflow https://stackoverflow.com/questions/2286305

Вопрос

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

  1. Приземление
  2. Касание вниз - многократное касание (одновременно)
  3. Коснитесь перетаскивания внутрь (аналогично перемещению пальца по пианино).

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

Итак, чтобы заставить "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];
        }
}
Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top