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:)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top