Xcode - Touchbegan - toques recentes/novos toques
-
26-09-2019 - |
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?
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.