如何排除子视图的手势?

How to Exclude gesture for subview?

我正在使用一个在图像视图中获取签名的应用程序。我使用 SWRevealViewController 作为侧边菜单。我的应用看起来像这样。

     class CaptureSignature: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIGestureRecognizerDelegate {

我正在编写下面的代码以显示侧边菜单

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

现在我的问题是,当我在图像视图上从右向左滑动时,没有画一条线,而是打开了侧边菜单。(因为我在 SWRevealViewController 中启用了 panGesture)。

我不想要的是,当我向右滑动时,我不想在 imageView 上启用滑动手势来显示菜单栏。我写了下面的函数,但它不起作用(即使我在其中放置断点时它也没有进入方法)

       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

    }

谁能帮帮我。

您是否尝试过在 UIImageView 上将 isUserInteractionEnabled 设置为 true

如果要针对特定​​视图禁用手势。

self.<yourview>.isUserInteractionEnabled = false

您可以在 Reveal 控制器上调整 属性。

revealController.draggableBorderWidth = # Your Value #

如果触摸开始小于该值,将限制显示控制器启动平移手势。 就像你的情况一样,如果你的图像视图 x 位置是 50。所以你可以将这个 属性 设置为 40。当用户触摸位置小于 40 时,平移手势将起作用。默认情况下,它的值为 0,这就是为什么平移手势从任何地方开始。

SWRevealViewController 提供此功能。写吧 revealViewController().panGestureRecognizer().isEnabled = false 在您要禁用打开菜单功能的控制器中。

您可以使用以下方法忽略特定区域的滑动手势。

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

你仍然可以打电话给 touchesMoved 来画你的签名。这是示例代码。

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")
}

对于上面的代码片段,滑动将在图像视图中被忽略,即 imgView