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.
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.
5 Réponses :
Avez-vous essayé de définir isUserInteractionEnabled
sur true
sur UIImageView?
Si vous souhaitez désactiver le geste pour une vue spécifique.
self.<yourview>.isUserInteractionEnabled = false
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.
SWRevealViewController fournit cette fonctionnalité. Ecrivez
RevealViewController (). panGestureRecognizer (). isEnabled = false
dans le contrôleur, vous souhaitez désactiver la fonctionnalité pour ouvrir le menu.
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 >
< / 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 :(