Question

J'ai une application qui commence à jouer un son lorsque l'utilisateur touche le UIView et la modification de différents tons que les diapositives utilisateur du doigt sur l'écran. Le son s'arrête lorsque l'utilisateur lève le doigt.

J'utilise le touchesBegan, Déplacé et Ended des événements pour cela.

Mon problème est touche Ended (et / ou annulé) est parfois déclenché correctement et le son continue à jouer même après que le doigt est soulevé de l'écran.

Afin de contourner ce problème, je voudrais mettre en œuvre une minuterie qui vérifierait le nombre de touches à l'écran et si elle est égale à zéro, il va vérifier et arrêter le lecteur audio si le jeu.

Je cherchais un code qui pourrait me obtenir le nombre de touches comme

* UITouch touche = [self getAllTouchesonScreen];

ou quelque chose:)

Était-ce utile?

La solution

Touches événement ne parfois clos pas se tiré.

J'ai essayé de placer des points d'arrêt pour des touches annulées et touche terminé les événements et il a frappé parfois ne marche pas.

essayer le programme d'échantillonnage GLPaint sur le site Web d'Apple et d'essayer un NSLog à Toches pris fin et faire quelques dessins rapides à l'écran et soulevez le doigt rapide, jeter le doigt écran.

Vous saurez ce que je veux dire. Ma solution actuelle pour cela implique accéléromètre:)

Astuce: J'utilise ceci pour trouver tous les événements: (void) sendEvent: événement (UIEvent *)

Autres conseils

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]
    }
}

Vous pouvez utiliser ce code dans toutes les fonctions d'événement tactile (touchesBegan, touchesEnded, touchesMoved) et vous pouvez compter touches et connaître leurs états.

Ne pas oublier touchesCanceled. Ajouter cette fonction / méthode et NSLog quand une se termine Retouchez là, je pense que vous trouverez quelques touches manquantes.

Si vous cherchez un compte du robinet - en tirant parti au même endroit plus d'une fois sans bouger le doigt bien - vous pouvez l'obtenir via:

-(void)iPhoneTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];
CGPoint touchPosition = [touch locationInView:self];
lastTouchTime = [touch timestamp];
myTouchCount = [touch tapCount];

Mais je fais aussi manuellement à l'aide touchesMoved pour voir jusqu'où il déplacé et l'annulation de la possibilité de doubler / robinet triple si l'un des robinets déplacé trop loin, et les robinets de comptage aussi longtemps que vous êtes dans un état de robinet valide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top