8
votes

Touché pas appelé ??? ou être appelé au hasard

Si je soulevais mon doigt de la première touche, il reconnaîtra la touche suivante. Ce n'est que lorsque je tiens mon premier contact continuellement, puis essayez de toucher une zone différente avec un doigt différent en même temps. Il va alors incorrectement l'enregistrement de cette deuxième touche comme étant de la première touche à nouveau.

Mise à jour Il a quelque chose à voir avec la touche touchante non appelée tant que la toute dernière touche est terminée (elle s'en fiche Si vous aviez déjà 5 autres touches terminées avant de finalement abandonner le dernier ... il les appelle tous pour se terminer une fois que la dernière dernière fois la touche finale) xxx


4 commentaires

J'ai créé un simple projet de test et il semble que la touche touchée soit appelée chaque fois que tout doigt est levé ...


Vladimir, diriez-vous de poster votre exemple de code quelque part afin que je puisse voir ce qui diffère? Pour une raison quelconque, tous mes retouches sont appelées plus tard sur tout en même temps au lieu de leur arrivée


Au fait, dans mon programme, les touches sont sur UiImageViews qui figurent dans une vision de ScrollView et tout cela se trouve dans un UIView si cela fait toute différence


Vladimir, pourrait-il avoir quelque chose à voir avec tous les envies UiImageViews étant dans une enveloppe de défilement? En dehors de la vision de Scrollie, ils fonctionnent bien et envoient immédiatement le message touché, mais dans le ScrollView, ils n'envoient pas le message immédiatement. Est-ce que cela est retardé d'une manière ou d'une autre ou n'est-il pas envoyé correctement la chaîne du répondeur?


7 Réponses :


0
votes

SET multiplexouchenabled .

in Interface Builder, c'est la case "Touche multiple" sous "Interaction utilisateur activée."


2 commentaires

Tewha, vous pouvez être sur la bonne piste ici ... Je crée les envies UIImageViews dans le code et définissez multiplexeuchenabled pendant cette configuration. Pour une raison quelconque, je ne suis pas sûr que cela devienne défini correctement. J'ai lu ailleurs que si MultiPétaouchenabled n'est pas défini sur Oui, alors que la touche touchée ne sera pas appelée tant que la dernière touche est terminée (qui correspond exactement à mon erreur!).


NEWMIND, vient de vérifier que tous ont été activés et assurez-vous que MultiPletouchenabled est oui pour tous :( Pourrait-il avoir quelque chose à voir avec tous les envies UiImageViews étant dans une envoi de défilement? En dehors de la ScrollView, ils font bien, mais dans le ScrollView, ils n'envoient pas le message immédiatement.



7
votes

Pour une raison quelconque, une touche touchée n'est en train de retarder que lorsque la touche se trouve dans le ScrollView. Si vous) désactivez la vision de défilement du défilement; ou b) N'utilisez pas de ScrollView, puis touchée est livré immédiatement.

J'ai entendu là où certaines personnes ont intercepté SendEvent, mais cela me semble esquissé et je ne veux vraiment pas bousculer la chaîne du répondeur puisque SendEvent gère de nombreux événements.

Toutes les pensées supplémentaires? Quelqu'un a-t-il déjà sous-classé uiwindow pour essayer d'intercepter les touches de cette façon? Toute entrée que vous pourriez fournir est appréciée.


0 commentaires

6
votes

the ScrollView a une propriété retardscontenttouches qui est défini sur oui par défaut. Il retardera tous les événements touchés jusqu'à ce qu'il détermine un geste de défilement.


0 commentaires

4
votes

Je sais que cette question est un peu âgée, mais je pensais que je partageais mon expérience pour quiconque trébuche sur ce fil à la recherche d'une réponse, comme je l'ai juste.

Je me débats avec ce problème pendant quelques heures et la seule solution que je pourrais proposer était de supprimer tout objet uigesturerecognizer que j'utilisais.

Pour ma configuration, j'utilisais PAN et appuyez sur Reconnaissants pour capturer ces gestes et utiliser TouchesBegan et Touchesbegan et Touché pour tout événement tactile standard. Ce n'est qu'à avoir supprimé les objets uigesturerecognizer que la méthode touchésive a commencé à être appelée à nouveau pour la deuxième touche se terminant. Plus précisément, il s'agissait de la reconnaissance panoramique qui causait les problèmes.

Je ne suis pas totalement sûr que cela s'applique dans ce cas, mais cela a résolu les problèmes que j'avais.


0 commentaires

10
votes

J'avais ceci aujourd'hui (ou plutôt que j'ai eu ce problème je suis jeté sur moi aujourd'hui!).

Qu'est-ce que j'ai vu arriver: p>

  • Écran tactile avec doigt 1 li>
  • Touchesbegan Fires Li>
  • écran tactile avec doigt 2 li>
  • Touchesbegan Fires Li>
  • Libération Doigt 2 Li>
  • rien ne se passe em> li>
  • Libération Doigt 1 Li>
  • Feux touchées li>
  • Feux touchées li> ul>

    As Gavin Clifton, il ne se produit que si vous ajoutez un reconnaissance de geste. Sans reconnaissance ajoutée, des incendies touchées après chaque doigt sont libérés. ce qui serait génial si je n'avais pas besoin d'utiliser des reconnaissants ... !!! em> p>

    J'ai résolu ceci en ajoutant gesterotation.delaystouchsensed = false; > À mon reconnaissance Création / Ajout de code: P>

    gestureRotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRotation_Callback:)];
    
    [gestureRotation setDelegate:self];
    gestureRotation.cancelsTouchesInView = FALSE;
    gestureRotation.delaysTouchesEnded = FALSE;        // <---- this line!!
    [self.view addGestureRecognizer: gestureRotation];
    [gestureRotation release];
    


0 commentaires

0
votes

Je viens d'avoir ce problème, où un touché ne serait jamais appelé sur un bouton dans un ScrollView. Basé sur la réponse d'Ovidiu, j'ai découvert que la définition manuelle de la vision du contenu de mon ScrollView a causé le problème. Vraisemblablement avoir le contentoffset définit la façon dont je disposais de confondre la visionneuse de défilement pour savoir si j'essayais d'appuyer sur le bouton ou de faire défiler la vue.

laissant le conserver décalé à 0,0 a fait disparaître le problème.


0 commentaires

0
votes

J'ai trouvé une autre option.

Après touchesbegan et cgpoint non déplacé selon touchesMoved , touchescellé appelé.

Cependant, si cgpoint modifié selon touchesMoved , touché appelé.


0 commentaires