Comment faire pour désactiver la fonction multitouch?
Mon application dispose de plusieurs boutons qui déclenchent différents événements. L'utilisateur ne doit PAS être capable de tenir plusieurs boutons. De toute façon, en appuyant sur plusieurs boutons bloque l'application.
Et donc, je vais essayer de désactiver le multi-touch dans mon application.
J'ai décoché "Multi-Touch" dans tous les fichiers xib, et aussi loin que je peux travailler sur, les propriétés 'multipleTouchEnabled" et " exclusiveTouch de contrôle si la vue utilise multitouch. Donc, à mon applicationDidFinishLaunching j'ai mis ceci:
self.mainViewController.view.multipleTouchEnabled=NO;
self.mainViewController.view.exclusiveTouch =YES;
Et dans chaque de mon point de vue, les contrôleurs, je l'ai mis dans le viewDidLoad
self.view.multipleTouchEnabled=NO;
self.view.exclusiveTouch=YES;
Cependant, il encore accepte plusieurs touches. Je pourrais faire quelque chose comme de désactiver les autres boutons après l'obtention d'un touch down de l'événement, mais ce serait un vilain hack. Il y a sûrement un moyen de désactiver correctement multi-touch?
- J'ai également essayé de faire la même chose mais pas encore en mesure de le faire. Personne ne sait comment désactiver plusieurs touche de sélection de Cocos2D?
- vous devez définir
exclusiveTouch = YES
sur chaque bouton, pas sur la vue. - Le principal problème que votre point de VUE est simple touche, mais pas les sous-vues.. Si vous avez besoin de désactiver les boutons, ou de mettre une vue imprenable sur les boutons et poignée touche unique sur elle.
- stackoverflow.com/a/49299728/1140335
Vous devez vous connecter pour publier un commentaire.
Si vous voulez un seul bouton pour répondre à des touches à la fois, vous devez définir exclusiveTouch pour ce bouton, plutôt que pour la vue parent. Sinon, vous pouvez désactiver les autres boutons lorsqu'un bouton de la "Touch Down" de l'événement.
Voici un exemple de ce dernier, qui a mieux fonctionné lors de mes tests. Réglage exclusiveTouch pour les boutons de type de travaillé, mais a conduit à certains problèmes intéressants lorsque vous avez déplacé votre doigt sur le bord d'un bouton, plutôt que de simplement en cliquant dessus.
Vous avez besoin de points de vente dans votre contrôleur relié à chaque bouton, et ont le "Touch Down", "Touch Up Inside", et "retouche de l'Extérieur" événements accroché sur les méthodes appropriées dans votre contrôleur.
Ce code est testé et fonctionne parfaitement pour moi.il n'y a pas d'application crash quand appuyant sur plus d'un bouton à la fois.
Votre application se bloque pour une raison. Poursuivre l'enquête, utilisez le débogueur, voir quel est le problème au lieu d'essayer de cacher le bug.
Edit:
OK, ok, je dois admettre que j'ai été un peu dur. Vous devez définir le exclusiveTouch bien sur chaque bouton. C'est tout. Le multipleTouchEnabled propriété n'est pas pertinent.
Basé sur neoevoke réponse, seulement d'améliorer un peu afin qu'il vérifie également les sous-vues " les enfants, j'ai créé cette fonction et de l'ajouter à mon fichier utils:
Ensuite, un simple appel à:
... fera l'affaire.
C'est assez souvent question d'être signalé par un de nos testeurs. L'un de l'approche que j'utilise parfois, mais il doit être utilisé consciemment, est de créer une catégorie pour
UIView
, comme celui-ci:Si vous souhaitez désactiver le multi de contact tout au long de l'application et ne veux pas écrire de code pour chaque bouton que vous pouvez simplement utiliser
Appearance
de bouton. Écrire en dessous de la ligne dansdidFinishLaunchingWithOptions
.C'est génial!! UIAppearance
Vous pouvez même l'utiliser pour tout de
UIView
classe donc, si vous voulez désactiver le multi-touch pour quelques boutons. Faire un CustomClass de bouton etIl y a un avantage de plus qui peut vous aider. Dans le cas où vous souhaitez désactiver le multi-touch de boutons d'une
ViewController
Pour désactiver le multitouch dans SWIFT:
Vous devez tout d'abord disposer d'une prise de chaque bouton et ensuite il suffit de régler la touche exclusive à true.Donc vous
viewDidLoad()
aurait:yourButton.exclusiveTouch = true
.//pas vraiment nécessaire, mais vous pourriez aussi ajouter:
self.view.multipleTouchEnabled = false
Très simple que vous pouvez utiliser faire usage de ExclusiveTouch de propriété dans ce cas
C'est une valeur Booléenne qui indique si le récepteur poignées de toucher exclusivement les événements.
La définition de cette propriété sur OUI provoque le récepteur pour bloquer la livraison des événements tactiles à d'autres points de vue dans la même fenêtre. La valeur par défaut de cette propriété est NON.
Pour la désactivation globale multitouch dans Xamarin.iOS
Copie&Coller le code ci-dessous:
Et le mettre sur les AppDelegate:
Mon expérience est que, par défaut, un nouveau projet, qui n'autorise même pas de multitouch, vous devez l'allumer. Mais je suppose que cela dépend de comment vous avez commencé. Avez-vous utilisé un mutlitouch exemple comme un modèle?
Tout d'abord, êtes-vous absolument sûr multitouch est sur? Il est possible de générer une seule touche en séquence assez rapidement. Le Multitouch est plus sur ce que vous faites avec deux doigts ou plus une fois qu'ils sont sur la surface. Vous avez peut-être seule touche, mais ne sont pas correctement traiter avec ce qui se passe si les deux touches sont pressées en même temps.
J'ai juste eu exactement ce problème.
La solution que nous avons fait était simplement pour hériter d'une nouvelle classe à partir de UIButton qui remplace la initWithCoder méthode, et l'utilisation que, lorsque nous avons eu besoin d'un seul bouton poussoir, à un moment (c'est à dire. partout):
Notez que cela fonctionne uniquement avec des boutons chargé de plume fichiers.
J'ai créé UIView Extension de Classe et a ajouté deux fonctions. et quand je veux désactiver l'affichage tactile je viens de l'appeler [vue makeExclusiveTouch];
Si vous souhaitez désactiver la fonction multitouch par programme, ou si vous utilisez cocos2d (pas de multipleTouchEnabled option), vous pouvez utiliser le code suivant sur votre ccTouches délégué:
Désactiver tous les boutons de l'affichage dans "Touch Down" de l'événement et de leur permettre de "Touch Up Inside" événement.
par exemple
J'ai décidé que ce problème de cette manière:
J'avais lutté avec quelques rares cas, lorsque vous faites glisser des objets autour d'un point de vue, où si vous avez été touché par un autre objet, en même temps il mettrait le feu à la touchesBegan méthode. Mon travail a été de désactiver l'interaction de l'utilisateur pour la vue parent jusqu'à ce que touchesEnded ou touchesCancelled est appelé.
Viens de régler tous les UIView de la propriété exclusiveTouch false faire l'affaire.