Как исключить жест для подпредставления? - PullRequest
0 голосов
/ 06 марта 2019

Я работаю с приложением, которое принимает подпись в режиме просмотра изображений.и я использую 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
    }

Теперь моя проблемаэто, пока я проводя на изображении справа налево, вместо рисования линии, боковое меню открывается (потому что я включил panGesture в SWRevealViewController).

Что я не хочу, так это то, что я не хочу включать жест смахивания на 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

    }

Может ли кто-нибудь помочь мне, пожалуйста.

Ответы [ 5 ]

0 голосов
/ 06 марта 2019

Вы можете игнорировать жест смахивания для определенной области, используя следующий метод.

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 голосов
/ 06 марта 2019

SWRevealViewController обеспечивает эту функцию.Просто введите revealViewController().panGestureRecognizer().isEnabled = false в контроллер, который вы хотите отключить функциональность, чтобы открыть меню.

0 голосов
/ 06 марта 2019

Если вы хотите отключить жест для определенного вида.

self.<yourview>.isUserInteractionEnabled = false
0 голосов
/ 06 марта 2019

Вы можете отрегулировать свойство на контроллере Reveal.

revealController.draggableBorderWidth = # Your Value #

Это ограничит контроллер раскрытия для запуска жеста панорамирования, если начало касания меньше этого значения.Как и в вашем случае ваш, если ваш вид изображения х местоположение 50. Таким образом, вы можете установить это свойство на 40. Чем жест панорамирования будет работать, когда местоположение касания пользователя меньше 40. По умолчанию его значение равно 0, поэтому и начинается жест панорамированияоткуда угодно.

0 голосов
/ 06 марта 2019

Вы пробовали установить isUserInteractionEnabled в true в UIImageView?

...