Interrogazione attuale numero di tocchi sullo schermo senza l'utilizzo di eventi su iPhone
-
27-09-2019 - |
Domanda
Ho un'applicazione che avvia la riproduzione di un suono quando l'utente tocca l'UIView e cambiando a diverse tonalità come le diapositive di utente il dito sullo schermo. Il suono si interrompe quando l'utente solleva il dito.
Sto usando il touchesBegan, spostato e si è concluso eventi per questo.
Il mio problema è tocchi Ended (e / o cancellata) non è a volte sparato correttamente e il suono continua a suonare anche dopo che il dito viene sollevato dallo schermo.
Quindi, come una soluzione vorrei implementare un timer che controlla per il numero di tocchi sullo schermo e se è pari a zero esso controllerà e fermare l'audioplayer se di gioco.
Sono stato alla ricerca di un po 'di codice che mi potesse ottenere il numero di tocchi come
* UITouch tocchi = [auto getAllTouchesonScreen];
o qualcosa:)
Soluzione
Tocchi Ended evento a volte non essere licenziato.
Ho provato a fissare punti di rottura per tocchi annullati e tocchi conclusosi eventi ed è successo a volte pretende molto.
provare il programma di esempio GLPaint dal sito Apple e provare un NSLog in Toches chiusi e fare alcuni disegni veloci sullo schermo e sollevare il dito veloce, come buttare il dito fuori dallo schermo.
Si sa cosa voglio dire. La mia soluzione attuale per ciò comporta accelerometro:)
Suggerimento: Io uso questo per trovare tutti gli eventi: (void) sendEvent: (UIEvent *) evento
Altri suggerimenti
NSSet *allTouches = [event allTouches];
for(GLuint index = 0; index < [allTouches count]; ++index)
{
UITouch *touch = [[allTouches allObjects] objectAtIndex:index];
if([touch phase] != UITouchPhaseCancelled)
{
CGPoint touchPoint = [touch locationInView:self];
//do something with touchPoint that has state [touch phase]
}
}
È possibile utilizzare questo codice in tutte le funzioni tocco evento (touchesBegan, touchesEnded, touchesMoved) e si può contare tocchi e conoscere i loro stati.
Non dimenticare touchesCanceled. Aggiungere questa funzione / metodo e NSLog che quando un tocco finisce lì penso che troverete alcuni tocchi mancanti.
Se siete alla ricerca di un conteggio tap - toccando nello stesso posto più di una volta senza muovere il dito tanto - si può ottenere tramite:
-(void)iPhoneTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPosition = [touch locationInView:self];
lastTouchTime = [touch timestamp];
myTouchCount = [touch tapCount];
Ma ho anche farlo utilizzando manualmente touchesMoved per vedere quanto lontano si muoveva e annullando la possibilità di raddoppiare / tap tripla se uno qualsiasi dei rubinetti spostato troppo lontano, e rubinetti conteggio finché sei in uno stato di rubinetto valida.