1
votes

Comment exclure le geste pour la sous-vue?

Je travaille avec une application qui prend la signature en vue d'image. et im utilisant SWRevealViewController pour le menu latéral. mon application ressemble à ceci.

 entrez la description de l'image ici

       func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {


        if let touchedView = touch.view, touchedView.isDescendant(of: imageView) {
            print("touched in image view")
            return false
        }
        return false

    }

j'écris le code ci-dessous pour afficher le menu latéral

     override func viewDidLoad() {
            super.viewDidLoad()
    let revealViewController = self.revealViewController()
            menuBtn.addTarget(revealViewController, action: #selector(SWRevealViewController.rightRevealToggle(_:)), for: .touchUpInside)
            revealViewController?.panGestureRecognizer()?.isEnabled = true
    }

maintenant, mon problème est, pendant que je glisse sur la vue de l'image de droite à gauche, au lieu de tracer une ligne, le menu latéral s'ouvre (parce que j'ai activé panGesture dans SWRevealViewController).

Ce que je ne veux pas, c'est que je ne veux pas activer le geste de balayage sur imageView pour afficher la barre de menu lorsque je fais glisser vers la droite. J'ai écrit le func ci-dessous mais cela ne fonctionne pas (même s'il n'entre pas dans la méthode quand j'y mets des points d'arrêt)

     class CaptureSignature: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIGestureRecognizerDelegate {

quelqu'un peut-il m'aider s'il vous plaît.


6 commentaires

< / a>


désolé @MuhammadZohaibEhsan, ça ne marche pas. je veux activer panGesture, mais je ne veux pas qu'il soit activé dans mon affichage d'image


Dessinez-vous sur la vue image?


Oui, je dessine la signature de l'utilisateur sur la vue d'image @SAIF


Ainsi, la désactivation du geste sur la vue image créera un problème. Vous devez donc désactiver le mouvement panoramique pour révélerViewController pour ce contrôleur de vue spécifique.


Merci @SAIF, mais ce n'est pas la bonne chose. Mais malheureusement je fais la même chose :(


5 Réponses :


0
votes

Avez-vous essayé de définir isUserInteractionEnabled sur true sur UIImageView?


0 commentaires

0
votes

Si vous souhaitez désactiver le geste pour une vue spécifique.

self.<yourview>.isUserInteractionEnabled = false


0 commentaires

0
votes

Vous pouvez ajuster la propriété sur le contrôleur Reveal.

revealController.draggableBorderWidth = # Your Value #

Cela restreindra le contrôleur de révélation pour démarrer le mouvement de panoramique si le début du toucher est inférieur à cette valeur. Comme dans votre cas, si votre image vue x emplacement est 50. Vous pouvez donc définir cette propriété sur 40. Le mouvement de panoramique fonctionnera lorsque l'emplacement tactile de l'utilisateur est inférieur à 40. Par défaut, sa valeur est 0, c'est pourquoi le mouvement de panoramique démarre de partout.


0 commentaires

0
votes

SWRevealViewController fournit cette fonctionnalité. Ecrivez RevealViewController (). panGestureRecognizer (). isEnabled = false dans le contrôleur, vous souhaitez désactiver la fonctionnalité pour ouvrir le menu.


0 commentaires

0
votes

Vous pouvez ignorer le geste de balayage pour une zone particulière en utilisant la méthode suivante.

func addSwipeGesture() {
   let leftSwipe = UISwipeGestureRecognizer(target: self, action: 
      #selector(handleSwipes(_:)))
   leftSwipe.delegate = self
   let rightSwipe = UISwipeGestureRecognizer(target: self, action: 
      #selector(handleSwipes(_:)))
   rightSwipe.delegate = self

   leftSwipe.direction = .left
   rightSwipe.direction = .right

   self.view.addGestureRecognizer(leftSwipe)
   self.view.addGestureRecognizer(rightSwipe)
}

@objc func handleSwipes(_ sender:UISwipeGestureRecognizer) {

   if (sender.direction == .left) {
     print("Swipe Left")
   }

   if (sender.direction == .right) {
     print("Swipe Right")
   }
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive 
touch: UITouch) -> Bool {
   return !self.imgView.bounds.contains(touch.location(in: self.imgView))
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
   print("moving")
}

et vous pouvez toujours appeler touchesMoved pour dessiner votre signature. Voici l'exemple de code.

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool

Pour l'extrait de code ci-dessus, le balayage sera ignoré pour la vue image, c'est-à-dire imgView

p >


0 commentaires