Pergunta

Eu tenho usado toques começou a rastrear até 8 toques, e cada um desencadeia um evento. Esses toques podem ocorrer ao mesmo tempo ou escalonados.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"Touch Began");
    NSSet *allTouches = [event allTouches];

    for (int i=0; i<allTouches.count; i++) {
        UITouch *touch = [[allTouches allObjects] objectAtIndex:i];
        if (/*touch inside button in question*/) {
            //Trigger the event.    
        }
    }
}

Esse código funciona para o Multitouch e não tem problemas, exceto: (ver se você consegue adivinhar)

Devido à maneira como a AllTouches funciona, ele literalmente recebe todos os toques. Por esse motivo, ele atravessa todos os toques que estão atualmente ativos quando o usuário inicia outro toque e, portanto, desencadeia o evento de um dos botões duas vezes.

Ex: Johnny está pressionando o botão 1. Ocorre o evento 1. Johnny deixa o dedo no botão 1 e pressiona o botão 2. O evento 2 ocorre, mas o botão 1 ainda faz parte de AllTouches e, portanto, o evento 1 é acionado novamente.

Então, aqui está a pergunta: como faço para obter o novo toque?

Foi útil?

Solução

O mesmo objeto de toque será devolvido nas chamadas subsequentes ao TouchesBegan para qualquer toque contínuo. Portanto, salve cada tocar cada uitouch *que você já tratou como iniciado (e ainda não terminou) e, como itera na próxima vez em toques, pule os que você salvou/marcou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top