Mettez la gestion UITouch de touchesBegan à UIScrollViewDelegate

voix
0

Je développe une application de dessin iOS où la principale caractéristique est qu'un utilisateur peut charger une image en arrière-plan, puis il peut commencer à dessiner le doigt sur le dessus de celui-ci, le zoom et le panoramique de l'image avec les tirages au-dessus de l'image elle-même.

Le schéma de l'application est la suivante.

MainUiView-> UIScrollView-> UIImageView

Les doigts de dessin et de suivi est géré sur la touchesBegan, touchesMoved, touchesEndedsubstitution de la UIResponder.

Le zoom et panoramique du UIImageViewest géré par la UIScrollViewDelegatemise en œuvre.

J'ai un bouton qui fait passer le mode application du dessin à Zooming et le mode panoramique de la manière suivante:

si vous voulez dessiner:

    [scrollView setUserInteractionEnabled:NO];
    [imageView setUserInteractionEnabled:YES];

de sorte que les touches sont gérées dans les touchesBegan, touchesMoved, les touchesEndedméthodes.

si vous voulez faire défiler et zoomer avec deux doigts en utilisant la Pincez pour zoomer geste

[scrollView setUserInteractionEnabled:YES]; 
[imageView setUserInteractionEnabled:NO];

de sorte que le geste deux doigts est géré par la UIScrollViewDelegate

Maintenant, je suis en train d'évoluer l'application de retirer le bouton pour passer du dessin pour l'agrandir et le mode panoramique.

Mon idée était de suivre la présence de deux doigts dans le touchesBeganpuis de désactiver l'interaction de l' utilisateur dans le UIImageViewpour permettre l'interaction de l' utilisateur dans le scrollview, mais le problème est que , après cette manière, les touches sont toujours gérées dans la touchesMovedméthode, rien ne vient à la scrollViewDelegatejusqu'à ce que je lève les doigts de l' écran, après cela, si je punt de nouveau les doigts sur le tout écran est géré par la scrollViewDelegate.

Donc , pour résumer: est - il possible d'arrêter le cycle de touches après touchesBeganet se propager à la ScrollViewDelegate?

Si cela est impossible, comment puis - je atteindre le zoom, la fonction de balayage panoramique et dessin sur un UImageView? Dois - je supprimer le scrollview et essayer de zoomer et déplacer la à UImageViewtravers les UIResponderméthodes?

Merci pour l'aide

Créé 19/09/2018 à 13:34
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Essayez de changer votre implémentation à utiliser geste au lieu reconnaisseurs de manipulation tactile en utilisant les méthodes de UIResponder. Les principaux avantages de cette approche sont les suivants:

  • Vous pouvez utiliser UIPanGestureRecognizer pour le dessin , ou même créer un reconnaisseur personnalisé
  • Vous pouvez avoir des relations de dépendance entre reconnaisseurs, en utilisant requireGestureRecognizerToFail , même à travers des vues
  • Vous pouvez parcourir tous une vue sur reconnaisseurs et désactiver uniquement ensemble spécifique de gestes sans désactiver des touches sur toute la vue
  • Gestuelles ont reconnaisseurs la même touche méthodes connexes, que vous pouvez utiliser pour déplacer votre code de gestion tactile de la mise en œuvre actuelle sur les gestes

Donc, votre point de vue de l' image aura soit panoramique ou votre recogniser geste personnalisé, avec une touche unique, pour le dessin, et vous pouvez boucle à travers les dispositifs de reconnaissance de ScrollView, et les marquer déclenchent pas si « dessiner » le geste est déclenché, à l' aide requireGestureRecognizerToFail.

Avec cela, vous n'avez pas besoin d'activer l'interaction utilisateur / désactiver sur l'un des points de vue, bien que vous aurez à faire de ce procès et erreurs pour obtenir tous les gestes de travailler les uns avec les autres correctement.

Bonne codage :)

Créé 19/09/2018 à 14:05
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more