XCode - touchesBegan - Touches recenti / Nuovi Touches
-
26-09-2019 - |
Domanda
ho utilizzato tocchi hanno cominciato a tracciare ben 8 tocchi, e ognuna si innesca un evento. Questi tocchi possono verificarsi contemporaneamente, o sfalsate.
- (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.
}
}
}
Questo codice funziona per il multitouch, e non ha problemi, ad eccezione di: (vedere se si può intuire)
A causa dei lavori allTouches modo, diventa letteralmente tutti i tocchi. A causa di questo, si scorre tutti i tocchi che sono attualmente attivi quando l'utente avvia un altro tocco, e quindi attiva l'evento di uno dei pulsanti per due volte.
Ex: Johnny è premendo il pulsante 1. Evento 1 si verifica. Johnny lascia il dito sul tasto 1, e preme il tasto 2. verifica Evento 2, ma il tasto 1 è ancora una parte di allTouches, e così, evento 1 viene attivato di nuovo.
Quindi, ecco la domanda: Come faccio ad avere il tocco nuovo
Soluzione
Lo stesso oggetto tocco verrà restituito nelle successive chiamate di touchesBegan per qualsiasi contatto continuo. Quindi, solo salvare ogni UITouch * tocco che è già stato trattato come iniziata (e non ancora terminato), e come si iterare la prossima volta a touchesBegan, saltare quelli che hai così salvato / contrassegnato.