La détection d'un toucher n'importe où sur l'écran
Je suis désireux de savoir quand un utilisateur a touché n'importe où sur l'écran de mon application.
J'ai regardé dans l'aide de -(UIResponder *)nextResponder mais malheureusement cela ne fonctionne pas, je suis également rechargé automatiquement un tableau, c'est déclenché lorsque cela se produit.
J'ai aussi essayé un geste de reconnaissance, avec le code suivant. Mais ce ne reconnaît que des touches sur l'affichage. Où que j'ai beaucoup de boutons que l'utilisateur va utiliser pour faire fonctionner l'application. Je voudrais éviter l'ajout d'un logiciel de reconnaissance de geste ou de code dans chaque bouton et le segment de contrôle que j'ai sur l'écran
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnView:)];
[self.mainView addGestureRecognizer:tap];
- (void)tapOnView:(UITapGestureRecognizer *)sender
{
//do something
}
J'ai aussi essayé de -(void)touchesBegan:(NSSet *)touche withEvent:(UIEvent *)de l'événement , mais cela a le même problème que le geste de reconnaissance.
Je me demandais si il n'y a aucun moyen que je pourrais réaliser cette tâche. J'espérais que je peut être en mesure de reconnaître le type d'événement à partir de l'intérieur de la nextResponder, et puis j'ai pu détecter si c'est le bouton par exemple.
EDIT: La raison pour laquelle je suis en train de travailler sur c'est que mon application doit rester actif et l'écran ne peut pas être verrouillé (j'ai donc désactivé l'écran de verrouillage). Pour éviter une utilisation excessive de la puissance, j'ai besoin de la luminosité de l'écran, mais alors le retour de la luminosité de l'arrière à l'original niveau une fois que l'application est touché. J'ai besoin de cette fonctionnalité pour seulement se produire sur 1 de mes viewcontrollers.
OriginalL'auteur Remixed123 | 2014-10-14
Vous devez vous connecter pour publier un commentaire.
Comme mentionné par Ian MacDonald, à l'aide de
hitTest::
est une excellente solution pour détecter l'interaction de l'utilisateur sur une application à large échelle, y compris lorsque les boutons, textfields, etc, sont sélectionnés.Ma solution a été de sous-classe
UIWindow
et de mettre en œuvre la méthode hitTest.Pouvez-vous fournir plus d'informations sur les détails pas comment utiliser le sous-classe de UIWindow - comme lors de l'initialisation, montrant plus de la fenêtre en cours, etc ?
OriginalL'auteur danfordham
Vous pouvez joindre votre
UITapGestureRecognizer
à votre[[UIApplication sharedApplication] keyWindow]
.Sinon, vous pourriez remplacer
hitTest:
racine de votreUIView
.Est là une tâche particulière que vous espérez accomplir? Il peut y avoir une meilleure façon que l'attribution d'un "n'importe où" le geste.
Modifier: Utilisation
hitTest:
.[[UIApplication sharedApplication] keyWindow] ne fonctionne pas avec des boutons
J'ai mis à jour ma réponse à vous montrer comment utiliser
hitTest:
à écouter les événements tactiles tout en laissant votre application se comporte comme normal.Merci, cela fonctionne, Mais aura besoin de regarder dans l'autre question, qu'il regarde comme il pourrait mieux convenir à ma solution
Je pense que cette solution peut fonctionner que dans "YourUIViewController". Comment puis-je capturer des événements du robinet dans l'ensemble de l'application. Nous ne pouvons pas continuer à ajouter de la PassthroughView dans tous les contrôleurs de vue. Toute solution?
OriginalL'auteur Ian MacDonald
Votre edition ajoute plus de clarté à votre question.
Puisque vous êtes en contrôle de la luminosité de l'écran, vous pouvez ajouter une vue transparente contrôleur avant de gradation de l'écran sur le dessus de la racine de votre contrôleur qui n'a qu'un seul métier, l'écouter, appuyez sur à l'aide de Appuyez sur le geste. Et sur le robinet, vous pouvez ignorer le point de vue de contrôleur et d'ajuster la luminosité de l'état précédent.
En faisant de sorte que vous n'avez pas à vous soucier de boutons cliqué, car ils seront en dessous de la transparence-vue-contrôleur. Depuis sa une toute nouvelle vue contrôleur assis sur le dessus de la pile, vous n'avez pas à modifier votre code existant.
Sa un nouveau point de vue contrôleur sur le dessus, de sorte qu'il recevrait tous les doigts sur l'écran.
OriginalL'auteur GoodSp33d
Ok j'ai eu un problème similaire avant.
Que je me souviens je sous-classé le UIWindow pour le plein écran de détection de et il Premier intervenant.
Que je remplacé le toucher à la poignée de sous-classes.
Vous pouvez également utiliser le code pour identifier le contrôle qui est été touché.
À désactiver le verrouillage de l'écran j'ai utilisé le code ci-dessous:
J'ai utilisé les fonctions suivantes à dim ou augmenter la luminosité de l'écran
J'espère que vous n'êtes pas oublier la notion de transmission de l'événement par le biais du répondeur de la chaîne. [auto.nextResponder touchesBegan:touche withEvent:event];
Aussi depuis le [NSWindow makeFirstResponder:] est une méthode de la fenêtre, il n'a de sens qu'après l'ajout de la vue correspondant à la fenêtre.
En appuyant sur un bouton n'entre jamais -(void)touchesBegan: donc je n'ai pas eu la chance de passer l'événement par le biais du répondeur de la chaîne. Il le fait entrer lorsque j'appuie sur les points de vue.
Pouvez-vous ajouter une bûche dans la sous-classé UIWindow - (void)sendEvent:(UIEvent *)événement { }. Pour vérifier la réception de l'événement tactile.
OriginalL'auteur bllakjakk