10
votes

Uiscrollview touchesbegan

Donc, tout ce que je veux faire est de jouer un son lorsque l'utilisateur touche un Uiscrollview. L'UISCrollViewelegate a cette méthode ScrollViewWillBEGINGRUGGE: mais elle s'appelle uniquement sur TouchMoved. Je veux que cela soit appelé sur Touchbegan.

Essayé Touchesbegan: Sans remarques: mais cela ne reçoit aucune touche. Quiconque a un indice?


0 commentaires

8 Réponses :


6
votes

Je pense que vous devrez devoir Sous-classe Uiscrollview pour pouvoir faire cela.

touchesbegan: Withevent: est seulement envoyé aux sous-classes d'UIView. Vous êtes problématiquement implémentant TouchSbegan: Sans: dans votre contrôleur, non? Si oui, cela ne fonctionnera pas de là ...

Alternativement, si vous mettez une sous-classe d'UIView (que vous avez écrite) dans votre Uiscrollview, vous pouvez également attraper l'événement TouchSbegan à partir de là (mais uniquement lorsque l'utilisateur touche cette sous-Signifie). UISCrollView passe sur les touches de ses sous-visions par défaut (voir TouchShouldbegin: Withevent: incontentview: dans UiscrollView).


0 commentaires

0
votes

Vous devriez ajouter TouchSbegan: SortEvent: sur votre Uiscrollview, pas sur l'Uiscrollviewdelegate. UiscrollView est une sous-classe d'uiresponder, qui a les événements tactiles.


1 commentaires

Et si le uiscrollview est le uiscrollviewelegate ?



5
votes

Vous pouvez également répondre à ces événements de votre contrôleur. Pour que cela fonctionne, vous devez définir cette fonctionnalité (dans votre contrôleur): xxx pré>

puis, dans "ViewDidAppEar", vous devez appeler «DevenFirStreponder»: P>

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self becomeFirstResponder];


0 commentaires

1
votes

nouvelles mises à jour sur le problème ici (y compris un lien vers ZoomScrollView Code source + une excellente explication sur UiscrollView Internals). En outre, consultez les Exemple Scrollviewsuite .


0 commentaires

13
votes

Utilisez un reconnaissance de gestes de robinet à la place:

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touch)];
[recognizer setNumberOfTapsRequired:1];
[recognizer setNumberOfTouchesRequired:1];
[scrollView addGestureRecognizer:recognizer];


2 commentaires

OK, cela fonctionne, mais comment devrais-je déclarer la méthode "toucher" pour recevoir l'endroit où l'utilisateur a touché?


@HERNANARBRE Par exemple: Stackoverflow.com/questions/8721864/ ...



18
votes

Utilisez un reconnaissance de gestes de robinet à la place:

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

// If not dragging, send event to next responder
  if (!self.dragging){ 
    [self.nextResponder touchesBegan: touches withEvent:event]; 
  }
  else{
    [super touchesEnded: touches withEvent: event];
  }
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

// If not dragging, send event to next responder
    if (!self.dragging){ 
     [self.nextResponder touchesBegan: touches withEvent:event]; 
   }
   else{
     [super touchesEnded: touches withEvent: event];
   }
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

  // If not dragging, send event to next responder
   if (!self.dragging){ 
     [self.nextResponder touchesBegan: touches withEvent:event]; 
   }
   else{
     [super touchesEnded: touches withEvent: event];
   }
}


2 commentaires

@ Rajneesh071 Où manipulez-vous le booléen "traînant"? Est-ce automatiquement traité lorsque le sous-classement UiscorllView ?


@ jet.chanchawat mec sa sous-classe de votre Uiscrollview et glisser est une propriété booléenne de Uiscrollview



0
votes

Rajneesh071 Réponse à Swift 4 Strong> Modifiez la classe personnalisée de ScrollView dans Storyboard vers CentremencierView CODE>

import Foundation

class CustomScrollView: UIScrollView {
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if !isDragging {
            next?.touchesBegan(touches, with: event)
        } else {
        super.touchesBegan(touches, with: event)
        }
    }
}


0 commentaires

0
votes

Vous devez faire défiler la vue de la sous-classe, puis implémenter la méthode TouchSbegan.Vous avez également besoin de définir la propriété FaireTouchdown à False.


0 commentaires