8
votes

Pouvez-vous forcer un événement tactile à annuler après ToucheBegan?

Compte tenu d'un certain état d'un de mes UIVIEWS, j'aimerais que cela réponde à ToucheBegan, puis annuler toute nouvelle touche touchée / terminée qui continuent à partir de cet événement sur TouchSbegan.

Fondamentalement, j'ai une sous-classe UIView au repos et si elle est touchée, je voudrais déplacer d'autres uiviews à l'écart ... Alors la prochaine fois qu'il est touché, la chaîne du répondeur peut réagir normalement à la touche touchée / terminée ...

Oui, je pourrais vérifier cet état dans TouxMoved / terminé, mais je me demande s'il y a un moyen de dérailler cette intermédiaire de l'événement tactile.


0 commentaires

5 Réponses :


-2
votes

Autant que je sache, l'Uiscrollview est capable d'annuler les touches. Je suppose donc qu'il y a un moyen de le faire. Désolé, je ne peux pas fournir une solution plus précise.


0 commentaires

0
votes

Je n'ai pas essayé, mais je suppose une supposition éduquée.

Le premier répondeur est le destinataire actuel des événements tactiles. Donc, démissionner comme le premier répondant devrait empêcher plus d'événements touch d'entrer. Une nouvelle touche Down définira un nouveau premier répondeur. P>

[self resignFirstResponder];


1 commentaires

Devineuse éduquée était bonne, op de faire le travail de tester cela allait bien, ne répondant pas aux résultats et à la suppression ou à la correction de votre réponse -1



0
votes

En supposant que vous avez une touche, l'objet tactile est toujours le même, ce qui signifie que vous pouvez comparer à l'aide de == xxx

donc, en stockant le dernier < code> uitouch dans votre uIView sous-classe (dans l'exemple, j'utilise une propriété appelée lastttouch ), vous pouvez comprendre qui touche que vous souhaitez ignorer et que vous souhaitez ignorer et que vous Voulez-vous reconnaître sur votre déplacement déplacé / annulé. Pas élégant et pas si direct, mais cela vous permet d'obtenir à ce que vous voulez.

Ceci peut être élargi pour plusieurs touches, bien sûr.


0 commentaires

1
votes
    let fakeTouch:Set<NSObject> = [UITouch()]
    let event     = UIEvent()

    self.touchesEnded(fakeTouch, withEvent: event)

1 commentaires

Veuillez ajouter une explication pour laquelle votre code fonctionne pour que les futurs utilisateurs puissent le comprendre facilement.



1
votes

Supprimer la vue pour la hiérarchie de vue

C'est un article très ancien sans réponse convaincante, j'ai donc décidé d'ajouter ma solution

Utilisation de Xcode 9, Swift 4 et iOS 11, ces solutions n'interrompent pas le toucher xxx

Le travail autour que j'ai trouvé est le suivant: xxx

Ceci est facile à mettre en œuvre dans les projets de code uniquement. Je ne l'ai pas testé en utilisant des vues dans Storyboard .

Vous devez vous assurer de gérer la hiérarchie de vue, au cas où vous pourrez restaurer la vue dans le même point de la pile de sous-visions. J'identifie des balises à des vues pour gérer la position dans le superview.subviews tableau


0 commentaires