如何排除子视图的手势?

问题描述 投票:0回答:5

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

enter image description here

     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

    }

任何人都可以帮助我。

ios swift uigesturerecognizer gesture swrevealviewcontroller
5个回答
0
投票

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

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,将忽略滑动


0
投票

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


0
投票

如果要禁用特定视图的手势。

self.<yourview>.isUserInteractionEnabled = false

0
投票

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

revealController.draggableBorderWidth = # Your Value #

如果触摸开始小于该值,它将限制显示控制器开始平移手势。与您的情况类似,如果您的图像视图x位置为50.因此您可以将此属性设置为40.当用户触摸位置小于40时,平移手势将起作用。默认情况下,其值为0,这就是平移手势开始的原因从任何地方。


0
投票

SWRevealViewController提供此功能。只需在控制器中写入revealViewController().panGestureRecognizer().isEnabled = false即可禁用打开菜单的功能。

© www.soinside.com 2019 - 2024. All rights reserved.