5

Я хочу добавить два пальца вверх и вниз в UITableView. Идея состоит в том, чтобы прокручивать ячейки с помощью одного пальца жест рукой и сделать некоторые другие действия, используя два пальца салфетки вверх/вниз жесты. Я хотел бы достичь подобного опыта в ночном режиме переключения Tweetbot в: https://vine.co/v/hF5J1Y7hubTРаспознать два пальца, прокручивать жест в UITableView

Это мой код:

func setupGestureRecognizer() { 

    swipeUp = UISwipeGestureRecognizer(target: self, action: "handleSwipe") 
    swipeDown = UISwipeGestureRecognizer(target: self, action: "handleSwipe") 

    swipeUp.direction = UISwipeGestureRecognizerDirection.Up 
    swipeDown.direction = UISwipeGestureRecognizerDirection.Down 

    swipeUp.numberOfTouchesRequired = 2 
    swipeDown.numberOfTouchesRequired = 2 

    self.tableView.panGestureRecognizer.maximumNumberOfTouches = 1 

    self.tableView.panGestureRecognizer.requireGestureRecognizerToFail(swipeUp) 
    self.tableView.panGestureRecognizer.requireGestureRecognizerToFail(swipeDown) 

    self.tableView.addGestureRecognizer(swipeUp) 
    self.tableView.addGestureRecognizer(swipeDown) 

} 

func handleSwipe() { 
    print("Swiped!") 
    let alert = UIAlertController(title: "Gesture recognizer", message: "Swipe detected", preferredStyle: UIAlertControllerStyle.Alert) 
    let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil) 
    alert.addAction(action) 
    self.presentViewController(alert, animated: true, completion: nil) 
} 

setupGestureRecognizer() называется в viewDidLoad()

Я получаю уведомление, когда я палец вверх или вниз двумя пальцами, но когда я использую жест панорамы, происходит значительное отставание перед перемещением стола. Это, вероятно, время пан жест должен ждать, чтобы убедиться, что салфетки жест не удается:

Это на самом деле имеет больше смысла для меня, чтобы установить requireGestureRecognizerToFail на это: swipeDown.requireGestureRecognizerToFail(self.tableView.panGestureRecognizer), но когда я попытался его красть жест не работает. Я думаю, что есть проблема с ошибкой panGestureRecognizer. Почему это не сбой, когда я использую два пальца, если я прямо заявляю, что он должен принять maximumNumberOfTouches = 1?

Вы знаете, как заставить эти жесты взаимодействовать друг с другом?

ответ

-1

Удалить эти строки

self.tableView.panGestureRecognizer.requireGestureRecognizerToFail(swipeUp) 
self.tableView.panGestureRecognizer.requireGestureRecognizerToFail(swipeDown) 

Установите жест делегат swipeUp и swipeDown

swipeDown.delegate = self 
swipeUp.delegate = self 

И ручка жест делегата для отказа динамически.

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    return true 
} 

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

Смежные вопросы