Détection de toutes les touches d'une application


3

Dans une application pour iPad, chaque fois qu'un utilisateur touche l'écran, je souhaite afficher une image, en mettant en évidence les points sur lesquels il est en contact. L'application contient un certain nombre de vues imbriquées, qui doivent toutes être touchées et se comporter normalement.

Cela semble simple, mais j'ai échoué à trouver un bon moyen de le faire. L'utilisation de touches began: with event et des fonctions associées sur le contrôleur de vue racine ne fonctionne pas car si une sous-vue est touchée, les événements ne sont pas déclenchés. J'ai également créé un système de reconnaissance de gestes «fictif» qui transmet les événements tactiles à une autre classe qui dessine des images. Cela fonctionne super-ish et boutons fonctionnent, mais casse UIScrollViews et je devine d'autres sous-vues avec des reconizers de geste.

est-il nulle part, vous pouvez simplement accéder tous événements tactiles sans affecter ces touches sont dirigés?

merci.

6

Votre système de reconnaissance des gestes factices devrait fonctionner. Il suffit de regarder pour définir les états. possible -> a commencé -> ...

Fondamentalement, votre système de reconnaissance de gestes transmet toutes les touches de manière à ce qu'il puisse être dans l'état démarré ou possible tout le temps pendant qu'il y a un contact. Pour vous débarrasser des problèmes avec d'autres reconnaisseurs de mouvements, renvoyez YES dans cette méthode de délégué.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

Autre option est de sous-classe principale UIWindow dans votre application et remplacer cette méthode

- (void)sendEvent:(UIEvent *)event 

Ici, vous devriez avoir accès à tous les événements. C'est assez facile de les filtrer.


3

Vous pouvez appliquer un UITapGestureRecognizer à l'ensemble de la vue et définir la propriété cancelsTouchesInView sur NO. Cela vous permettra d'être averti de tous les taps sur la vue et ses sous-vues sans intercepter tous les événements tactiles.

En outre, vous pouvez implémenter la méthode déléguée -gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: pour empêcher ce reconnaisseur de mouvements d'empiéter sur ceux utilisés par des vues telles que UIScrollView.

  0

Cela pourrait fonctionner. Je vais essayer! 08 déc.. 112011-12-08 15:24:52


1

vous pouvez essayer hitTest primordial: withEvent:

-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event 

Ce peut-être ce que vous recherchez.

  0

L'interruption de la méthode hitTest ne suit pas les touchers, donc je devrais faire beaucoup de logique supplémentaire pour suivre les touches qui ne bougent pas et si deux touches proches sont la même touche. 08 déc.. 112011-12-08 15:23:58